如何调试为什么最简单的MySQL查询返回false?

时间:2012-03-08 14:56:07

标签: php mysql

我使用xampp。我执行了MySQL连接:

$connection = mysql_connect($host , $user , $passw);
mysql_select_db($db, $connection);

我收到带有echo命令的输出(通过检查布尔返回的值)建立连接并找到数据库$ db。

但最简单的查询如:

$query = mysql_query("SELECT * FROM 'users'");

返回false。我该如何调试原因?谢谢。

3 个答案:

答案 0 :(得分:16)

强制性更新:由于mysql ext已不复存在,以下是我在网站上根据Stack Overflow回答1000s问题的经验编写的两个剩余MySQL API的答案:

简而言之,对于mysqi,必须在mysqli_connect()调用之前添加以下行:

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

而对于PDO,必须设置正确的错误模式,例如

$pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );

从旧的mysql ext开始,

要从mysql_query()收到错误,您必须使用mysql_error()功能 所以总是以这种方式运行所有查询,至少在开发更高级的查询处理程序之前是这样的:

$query = "SELECT * FROM 'users'";
$result = mysql_query($query) or trigger_error(mysql_error()." ".$query);

您当前查询的问题是'users'部分。单引号必须用于分隔字符串,而对于标识符,您必须使用反引号:

SELECT * FROM `users`

要在开发过程中查看这些错误,请在代码顶部添加这些行,以确保可以看到发生的每个错误

ini_set('display_errors',1);
error_reporting(E_ALL);
但是,在生产服务器上,第一行的值应该从1更改为0

答案 1 :(得分:4)

使用mysql_error()函数:

$query = mysql_query("SELECT * FROM 'users'") or die(mysql_error());

编辑:Per Col. Shrapnel的评论:你不应该在测试环境之外使用die()。一般来说,编写甚至用于生产的代码时,这是不好的做法。

以下是一些更多信息:http://www.phpfreaks.com/blog/or-die-must-die

答案 2 :(得分:1)

基于Your Common Sense回答,这是一种面向对象的风格:

$query = "SELECT * FROM 'users'";
$result = $mysqli -> query($query) or trigger_error($mysqli -> error." ".$query);