2014-11-21 115 views
0

我有用phpMyAdmin客戶端創建的這個數據庫。像我的PHP代碼中的SELECT * FROM TagData LIMIT 0,10等具體查詢運行完美。但是,當我將通配符添加到像SELECT * FROM TagData WHERE Device_Name LIKE 'Valve%' LIMIT 0,10這樣的查詢時,它不起作用。奇怪的是,完全相同的SQL在phpMyAdmin工具中是完美的。查詢MySQL數據庫

這是我跑我的查詢在PHP中:

$query="SELECT * FROM TagData WHERE Device_Name LIKE 'Valve%' LIMIT 0,10"; 
$tmpResult=mysql_query(sprintf($query)); 

我有一個強烈的感覺,在$查詢字符串中的引號字符都是問題。有人可以解釋我做錯了什麼,爲什麼我做錯了。

結果mysql_error()給出的是:

查詢爲空

+0

phpMyAdmin是一個數據庫** **客戶端不是一個數據庫。不要將它與MySQL混淆。 – Quentin 2014-11-21 11:20:16

+3

爲什麼'sprintf'?你讀過[sprintf](http://php.net/sprintf)嗎? – 2014-11-21 11:20:58

+0

「不起作用」不是「明確的問題陳述」。定義「不起作用」。測試'mysql_query'的返回值。使用'mysql_error'。看看你傳遞給'mysql_query'的實際查詢(即'sprintf'的返回值(你不應該在那裏使用))。 – Quentin 2014-11-21 11:21:33

回答

0

你不需要的sprintf當你不插入任何自定義參數。 只需保持原狀。

您的查詢是emtpy,因爲您給sprintf的字符串格式不正確,sprintf返回null /空字符串。

您需要參數放置在sprintf中,否則這沒有用。並且%是sprintf的控制字符,爲了避免這種情況,您必須將%%而不是%放入,但是我的建議只在沒有任何參數的情況下才使用!

爲了使您的查詢工作剛剛火生的

$query= "SELECT * FROM TagData WHERE Device_Name LIKE 'Valve%' LIMIT 0,10"; 
$tmpResult = mysql_query($query); 

而現在,請看看什麼樣的sprintf實際上做:

http://php.net/manual/en/function.sprintf.php

但是請考慮升級到庫MySQLi或PHP/PDO擴展,因爲MySQL類過時,不推薦使用,無法使用,速度慢,將來會從PHP中刪除。

http://php.net/manual/en/book.mysqli.php

http://php.net/manual/en/book.pdo.php

+0

運行像一個魅力。非常感謝答案和信息! – ArabCheese 2014-11-21 11:32:00