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

时间:2013-08-28 16:46:35

标签: php mysql sql where

我有一个脚本,我想从表中读取并列出列检查= 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 个答案:

答案 0 :(得分: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

check关键字reserved in MySQL的事实也无济于事。您可以使用它来识别对象,但需要采取预防措施:正确封装在反引号中(`):

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

强烈考虑

  • 一劳永逸地留下mysql_*。不推荐使用!不安全!这里是龙!
    • 最好是正确地使用PDO,通过预备陈述
  • 阅读SQL injection。这可能是任何一天的坏消息。
    • 最好是正确地使用PDO,通过预备陈述

答案 1 :(得分:0)

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

答案 2 :(得分:0)

你真的应该使用mysqli

但您可以尝试SELECT tasks FROM tasks WHERE check = 1

之类的内容

答案 3 :(得分:0)

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

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

还要考虑使用引号将阻止查询在“check”列上跟踪最终索引。