当我使用php包含WHERE时,从sql读取停止


Read from sql stops when I include WHERE using php

我有一个脚本,我想从表中读取,并列出列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",两列为"task"(varchar255)和"check"(int11)

即时问题

为什么什么都没有显示?很可能您有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级

check关键字在MySQL中被保留的事实也没有帮助。您可以使用它来识别对象,但需要注意的是:正确地封装在backticks(`)中:

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

强烈考虑

  • 一劳永逸地把CCD_ 7抛在身后。弃用!不安全!龙来了!
    • 最好是通过准备好的语句正确使用PDO
  • 阅读SQL注入。这在任何一天都可能是坏消息。
    • 最好是通过准备好的语句正确使用PDO

同意,正如佩特卡所说,你根本不需要报价:

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

还要考虑使用引号将防止查询跟随"check"列的最终索引。

您真的应该使用mysqli

但是你可以试试SELECT tasks FROM tasks WHERE check = 1

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