我正在使用PDO来运行此查询,有没有办法查看查询是否返回false?为什么我的期望结果时我的查询没有返回任何内容?
$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
,他们对我来说似乎很好,没有错误或任何错误。
答案 0 :(得分:0)
您的代码存在一些问题。
第一个也是最大的问题是你假设你的查询是正确的,所以你不检查任何sql错误。 PDO提供了广泛的异常处理(请参阅此处的PDO Exception Questions - How to Catch Them问题)。
这将告诉您不能使用参数替换预准备语句中的字段名称。为什么?因为预处理语句的工作方式是MySQL编译它们并准备它们的执行计划。如果在编译时不知道字段或表,则MySQL也无法准备执行计划。这意味着你不能拥有
WHERE ? LIKE ?
在准备好的声明中,必须在查询中提供字段名称。所以,你可以拥有
WHERE address LIKE ?
但首先修复异常处理,因为这样可以让您获得实际的错误消息。
答案 1 :(得分:0)
您的查询存在问题:
$selectsql = "SELECT firstname`,`surname`,`phone`,`address`,`username`,`StudentID` FROM `student_info` WHERE ? LIKE ?";
where
之后的占位符搞乱你的查询,在where子句之后应该有一个列名,我看到$searchby
根据用户选择的项目进行更改。
你应该注意的一件事是:
表格和列名称不能被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";
}
?>