2012-12-16 43 views
-2

我是PHP初学者。当我开始我的第一个SQL查询时,我遇到了这个问题:MySQL SELECT错误

数据库查询页面失败:您的SQL语法有错误;检查对应于你的MySQL服务器版本在线路附近使用“[”身份证“]}”正确的语法手册1

还有就是我的SELECT命令:

$page_set = mysql_query(
    "SELECT * FROM pages WHERE subject_id = {[$subject'id']}", $connection 
); 

我检查了所有我的数据库表和一切都是正确的。此查询工作:

$page_set = mysql_query("SELECT * FROM pages" ,$connection) 
+2

你的变量是完全畸形。外括号{}是正确的,但是内括号[]只能绕'id'。 – imkingdavid

回答

0

展望未来,构建您的查询字符串在这样一个单独的变量:

$sql = "SELECT * FROM pages WHERE subject_id = {[$subject'id']}"; 

然后运行这样的查询:

$res = mysql_query($sql); 

如果你这样做,你可以看到完全解析的查询字符串,如下所示:

if (!$res) die("FAIL: $sql BECAUSE: " . mysql_error()); 

必须从mysql_query()测试结果值 - 它不是黑匣子;它会因为你不能控制的原因而失败。发生故障时,您需要识别它并处理错误状况。

Siedbar注意:mysql扩展现在已被PHP弃用,所以您可能想为您当前/将来的工作选择PDO或MySQLi。

如果你是新来的PHP,这是一个非常伟大的书,以帮助您开始: http://www.sitepoint.com/books/phpmysql5/

+1

注意:{[$ subject'id']}应该是{$ subject ['id']} –

+0

@Ray:刚刚编辑:没有必要的问候(甚至不鼓励) – hakre

+0

@hakre:不确定我还没有明白;我试图向这个问题的作者展示如何检测和可视化错误。关于给一条鱼vs教如何钓鱼的东西;-) –

2

尝试这样:

$page_set = mysql_query("SELECT * FROM pages WHERE subject_id = '" . $subject['id'] . "'", $connection); 

这假定id为$主题数组,我猜在一个项目你要什么在这里。我不认为你需要这些大括号“{”,但是你可能需要在where子句中的值附近引用单引号。

此外,如果这不工作,尝试呼应的是,正在运行的SQL命令,你应该能够看到这个问题(或您的问题发送SQL命令一样)

+2

需要逃脱! – prodigitalson

+1

如果$ subject ['id']是一个整数,不要把它放在'和'中。 – imkingdavid

1

试试这个,

$page_set = mysql_query("SELECT * FROM pages WHERE subject_id = '" . $subject['id'] . "'", $connection); 

警告说,这个代码与SQL Injection脆弱的,请阅读下面的文章,以了解如何从中阻止,

+0

你不需要在{}中包装$ subject ['id']吗? – imkingdavid

+0

既然它是一个数组,他需要'{}',非? – prodigitalson

+0

哦,你编辑它,以便它不需要它们。没关系。 – imkingdavid

0
$page_set = mysql_query("SELECT * FROM pages WHERE subject_id = {$subject['id']}", $connection); 
0

上述所有可以工作,但我更喜欢我自己最干净的方法可以是:

$page_set = mysql_query("SELECT * FROM pages WHERE subject_id = '".$subject['id']."'", $connection); 

还是我推荐给你,作为一个初学者:

$subject_id = $subject['id']; 
$page_set = mysql_query("SELECT * FROM pages WHERE subject_id = '$subject_id'", $connection); 

我建议你使用我写的第二种方法。这是最好和最干净的做法。

注意:请注意,mysql_扩展已正式折旧。 您应该使用mysqli或PDO。 (http://nl3.php.net/manual/en/function.mysql-query.php)

0

这不是你的SELECT命令。这是一个PHP的mysql_query命令。首先创建SQL,然后用它查询数据库:

$sql = "SELECT * FROM pages WHERE subject_id = {[$subject'id']}"; 
$page_set = mysql_query($sql, $connection); 

如果再碰上错误,你可以输出$sql,并检查它的样子。与错误消息进行比较并修复您的SQL查询构建。

如果您正在寻找一些灵感,该变量的输出如何完成,see an existing answer

如果您使用PDO而不是弃用(长期过时,不再支持)功能,事情将变得更加容易。特别是参数化查询将帮助您构建SQL命令,这些功能甚至不支持!

对于一个教程,请参阅:PDO Tutorial for MySQL Developers