SQL 中的 LIKE 无效

LIKE in SQL is not working

我正在使用 PDO 运行 这个查询,有没有办法查看查询 return 是否为假?为什么我的查询 return 什么都没有,而我期望得到结果?

                $selectsql = "SELECT `firstname`,`surname`,`phone`,`address`,`username`,`StudentID` FROM `student_info` WHERE ? LIKE ?";
                $selectstmt = $conn->prepare($selectsql);
                $selectstmt->execute(array($searchby,"%{$searchval}%"));
                while($data = $selectstmt->fetch(PDO::FETCH_ASSOC)){
                  echo "
                  <tr>
                    <td>{$data['firstname']}</td>
                    <td>{$data['surname']}</td>
                    <td>{$data['phone']}</td>
                    <td>{$data['address']}</td>
                    <td>{$data['username']}</td>
                    <td>Delete Account</td>                    
                  </tr>
                  ";
                  var_dump($data);
                }   

我把 $searchby$searchval 都扔掉了,我觉得它们很好,没有打错什么的。

您的代码存在几个问题。

第一个也是最大的问题是您假设您的查询是正确的,所以您没有检查任何sql错误。 PDO 提供了广泛的异常处理(请参阅此处关于 SO 的 PDO Exception Questions - How to Catch Them 问题)。

这会告诉您不能使用参数来替代准备语句中的字段名称。为什么?因为准备好的语句的工作方式是 MySQL 编译它们并准备它们的执行计划。如果某个字段或 table 在编译时未知,则 MySQL 也无法准备执行计划。这意味着你不能

WHERE ? LIKE ?

在准备好的语句中,您必须在查询中提供字段名称。所以,你可以

WHERE address LIKE ?

但首先要修复异常处理,因为这将使您能够获得实际的错误消息。

您的查询存在问题:

$selectsql = "SELECT firstname`,`surname`,`phone`,`address`,`username`,`StudentID` FROM `student_info` WHERE ? LIKE ?";

where 之后的占位符打乱了您的查询,在 where 子句之后应该有一个列名,顺便说一句,我看到 $searchby 根据用户选择的项目而变化。 您应该注意的一件事是:

Table and Column names cannot be replaced by parameters in PDO.

您的查询应如下所示。

<?php

$search = "%".$searchval."%";
$selectsql = "SELECT `firstname`,`surname`,`phone`,`address`,`username`,`StudentID` FROM `student_info` WHERE $searchby LIKE ?";
    $selectstmt = $conn->prepare($selectsql);
    $selectstmt->execute([$search]);
    $results = $selectstmt->fetch((PDO::FETCH_ASSOC));

    if(count($results) > 0){
      var_dump($results);
        foreach($results as $data):?>
          <tr>
              <td><?php echo $data['firstname'];?></td>
              <td><?php echo $data['surname'];?></td>
              <td><?php echo $data['phone'];?></td>
              <td><?php echo $data['address'];?></td>
              <td><?php echo $data['username'];?></td>
              <td>Delete Account</td>                    
        </tr>

      <?php
          endforeach;
    }else{

      echo "no results found";
    }
?>