2014-11-21 199 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