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

标签 php mysql sql where-clause

我有一个脚本,我想从一个表中读取并列出列 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)

最佳答案

眼前的问题

为什么没有显示?您很可能遇到 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();
}

你的问题很可能是引号——更新:在多个层面上:

一级

  • 双引号"在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

关于php - 当我使用 php 包含 WHERE 时,从 sql 中读取停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18493755/

相关文章:

mysql - 为什么我的 MySQL 存储过程不循环?

sql - Postgresql 查询以检索具有按深度排序的所有子项的父项

sql - 自动化 Azure SQL 数据库部署时如何处理环境特定的安全权限?

php - Laravel5 (PHP) 还是 SailsJS (node.js)?

php - json_encode() 期望参数 2 很长,字符串给定

c# - 即使我在 SQL 控制台中测试命令文本时命令文本是正确的,我的命令文本仍然有错误

mysql - 合并 2 个选择语句

javascript - 有没有办法在用户按下 "print screen"按钮时隐藏图片?

PHP mkdir() 无效路径

javascript - Node/JavaScript 日期时间和 MySQL