【问题标题】:Why is my SQL query in PHP failing?为什么我在 PHP 中的 SQL 查询失败?
【发布时间】:2017-09-11 22:38:35
【问题描述】:

我有一个应该返回数据库查询的 PHP 函数:

function editprojectform(){
  global $conn;

  if(isset($_POST['project_id'])){
    $project_id = $_POST['project_id']; 
    $sql = "SELECT * FROM projects WHERE Project_ID=".$project_id;
      if ($conn->query($sql) === TRUE) {
        echo "It works";
      } else {
          echo "Error: " . $sql . "<br>" . $conn->error;
      }
  }
}

但是它打印出错误而不是打印出项目名称:

错误:SELECT * FROM projects WHERE Project_ID=3

我可以将这个确切的查询复制并粘贴到 PHPadmin 中,它会返回预期的结果。我想弄清楚为什么它在这里不起作用?我有一个非常相似的删除记录的功能,它工作正常。

谢谢。

【问题讨论】:

  • Project_ID 是哪种数据类型?
  • 很可能您将 id 作为字符串传递。因此,尝试将您的查询更改为:$sql = "SELECT * FROM projects WHERE Project_ID='".$project_id."'"; 将字符串包装成单引号。
  • 这是因为它没有作为字符串传递,奇怪的是我在一个函数中有一个查询,它没有将它作为一个有效的字符串传递"DELETE FROM projects WHERE Project_ID=".$project_id; ...
  • 您可以通过尝试普通查询$sql = "SELECT * FROM projects WHERE Project_ID=3"; 来验证它是否有效。如果可行,您可以确定 $project_id 是一个字符串。设置 $project_id 时,您也可以将值转换为 INT:$project_id = (int)$_POST['project_id'];

标签: php mysql


【解决方案1】:

我假设您使用的是mysqli::query。如果您阅读文档,尤其是 return values 部分,它会声明

失败时返回 FALSE。对于成功的 SELECT、SHOW、DESCRIBE 或 EXPLAIN 查询 mysqli_query() 将返回一个 mysqli_result 对象。为了 其他成功的查询 mysqli_query() 将返回 TRUE。

因此,由于您使用的是 SELECT 语句,因此该函数将返回 FALSE 或返回一个 not identical (===) 为 TRUE 的对象。所以,总会失败。

与 SELECT 语句不同,如果您使用 DELETE 语句,该函数将只返回 TRUE 或 FALSE。所以根据你的语句类型,函数会返回不同的值。

只需按照文档中的示例,将您的 IF 语句替换为 if ($result = $conn-&gt;query($sql)) {

【讨论】:

    【解决方案2】:

    在这种情况下,使用 PDO 会更好。

    $db = $pdo->prepare('SELECT FROM projects WHERE Project_ID=:Project_ID');
    $db->bindParam(':Project_ID', $project_id);
    $db->execute();
    $res = $db->fetchAll();
    
    var_dump($res)
    

    【讨论】:

      猜你喜欢
      • 2011-05-24
      • 2011-02-26
      • 2021-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-17
      相关资源
      最近更新 更多