0

我有一个脚本,我想从表中读取并列出列 check = 1 的所有“任务”。我的脚本工作正常,并将列出所有任务....直到我包含 WHERE。然后什么都不会读入页面。我究竟做错了什么?

问题是WHERE check="1"

$sql = mysql_query('SELECT tasks FROM tasks WHERE check="1"');
while($row = mysql_fetch_array($sql))
  {
  echo $row['tasks'];
  echo "<br />";
  }

表名为“tasks”,两列分别为“tasks”(varchar255)和“check”(int11)

4

4 回答 4

3

即时问题

为什么什么都没有显示?很可能您有一个 SQL 错误。但是你不会在任何地方打印它。

使用 PHP 显示 mysql 错误

//this is a bad query, this time it is intentional
$sql = mysql_query('SELECT tasks FROM tasks WHERE check="1"');

if($sql)
{
    //do processing here, no error
    while($row = mysql_fetch_array($sql))
    {
        echo $row['tasks'];
        echo "<br />";
    }
}
else
{
    //output error, or handle it in any other way you like
    echo mysql_error();
}

你的问题很可能是引用 -更新:在多个级别上

1级

  • "SQL 语句中不能使用双引号。'对字符串常量使用单引号,`对封闭对象名称(表、列等)使用反引号

交换报价:

$sql = mysql_query("SELECT tasks FROM tasks WHERE check='1'");

转义语录:

$sql = mysql_query('SELECT tasks FROM tasks WHERE check=\'1\'');
  • 你需要报价吗?这似乎是一个数值...

只有数值,没有任何类型转换:

$sql = mysql_query('SELECT tasks FROM tasks WHERE check=1');

2级

MySQL 中保留check关键字的事实也无济于事。您可以使用它来识别对象,但要注意:正确括在反引号 ( ) 中:`

$sql = mysql_query('SELECT tasks FROM tasks WHERE `check`=1');

强烈考虑

  • mysql_*一劳永逸地留下。已弃用!不安全!这里是龙!
    • 最好是通过准备好的语句正确使用 PDO
  • 阅读SQL 注入。这在任何一天都可能是坏消息。
    • 最好是通过准备好的语句正确使用 PDO
于 2013-08-28T16:50:48.577 回答
0

你真的应该使用mysqli

但你可以尝试类似的东西SELECT tasks FROM tasks WHERE check = 1

于 2013-08-28T16:53:50.773 回答
0
$sql = mysql_query("SELECT tasks FROM tasks WHERE check='1'");
while($row = mysql_fetch_array($sql))
{
    echo $row['tasks'];
    echo "<br />";
}
于 2013-08-28T16:52:42.317 回答
0

同意,正如 ppeterka 所说,您根本不需要引号:

$sql = mysql_query('SELECT tasks FROM tasks WHERE check=1');

还要考虑使用引号会阻止您的查询遵循“检查”列上的最终索引。

于 2013-08-28T16:56:24.027 回答