-2

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

页面上的数据库查询失败:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 '['id']}' 附近使用正确的语法

有我的 SELECT 命令:

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

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

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

6 回答 6

2

尝试这样的事情:

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

这假设 id 是 $subject 数组中的一个项目,我猜这就是你在这里要做的。我认为您不需要那些花括号“{”,但您可能需要在 where 子句中的值周围加上单引号。

此外,如果这不起作用,请尝试回显正在运行的 sql 命令,您应该能够看到问题(或在您的问题中发布 SQL 命令)

于 2012-12-16T22:08:53.273 回答
1

试试这个,

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

请注意,此代码易受攻击SQL Injection,请阅读下面的文章以了解如何防止它,

于 2012-12-16T22:09:11.627 回答
0
$page_set = mysql_query("SELECT * FROM pages WHERE subject_id = {$subject['id']}", $connection);
于 2012-12-16T22:09:26.883 回答
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)

于 2012-12-16T22:13:37.300 回答
0

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

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

如果您随后遇到错误,您可以输出$sql并检查它的外观。与错误消息进行比较并修复 SQL 查询的构建。

如果您正在寻找如何完成变量输出的灵感,请参阅现有答案

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

有关教程,请参阅:MySQL 开发人员的 PDO 教程

于 2012-12-16T22:14:56.643 回答
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/

于 2012-12-16T22:19:38.707 回答