为什么PHP中的SQL查询失败?

时间:2017-04-15 23:56:51

标签: php mysql

我有一个应该返回数据库查询的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项目WHERE Project_ID = 3

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

感谢-你。

2 个答案:

答案 0 :(得分:3)

我假设你正在使用mysqli::query。如果您阅读文档,特别是return values部分,则说明

  

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

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

与SELECT语句不同,如果使用DELETE语句,该函数将仅返回TRUE或FALSE。因此,根据您拥有的语句类型,该函数将返回不同的值。

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

答案 1 :(得分:1)

在这种情况下,最好使用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)