为什么我的WHERE查询不起作用?


Why won't my WHERE query work?

我已经关注这个问题好几天了。起初我认为问题是在绑定参数,但我已经简化回一个基本的mysqli页面,仍然找不到错误。我将在此之前的搜索页面中其中一行的键传递到此页面,以便我可以显示所选项目的更多详细信息。

我添加了一个echo来测试正确打印的isset,它还将Key放入URL中。如果我省略WHERE Key = '$Key',它会打印出整个数据集。如果我用$Key替换$row['Key'],它会打印整个数据集,但每一行都有选定的键。

这告诉我它正确地传递了键,打印函数是正确的。我试过使用WHERE Key = $_GET['Key']以及$Key,但都不起作用。我一定是做错了什么,但是在三天里尝试了我能想到的所有代码变体之后,我没有更多的想法。

<?php
$mysqli = new mysqli('localhost','user','password','database');
if ($mysqli->connect_error) {
die('Error : ('. $mysqli->connect_errno .') '. $mysqli->connect_error);
}
if(isset($_GET['Key'])){
$Key = $_GET['Key'];
echo "Got it";
    }else{
    echo "No input";
    }
$results = $mysqli->query("SELECT * FROM engravers WHERE Key ='$Key'");
$img_url = "http://www.xxxxx.net/images/"; 
print '<table border="1" >';    
while($row = $results->fetch_assoc()) {
print '<tr>';
print '<td>'.$row["Key"].'</td>';
print '<td>'.$row["Country"].'</td>';
print '<td>'.$row["Year"].'</td>';
print '<td>'.$row["Description"].'</td>';
print '<td>'.$row["Engraver1Surname"].'</td>';
print '<td>'.$row["Designer1Surname"].'</td>';
print '<td>'.$row["Printer"].'</td>';
print  '<td>'.'<img src="'.$img_url.$row['Images'].'" />'.'</td>'; 
print '</tr>';
}  
print '</table>';

$results->free();
$mysqli->close();
?>
</body>

应该避免使用许多SQL列名。请阅读:http://technet.microsoft.com/en-us/library/ms189822.aspx

MySQL中有相同的保留关键字

如果你使用了其中一个,请用' '

盖住它
$results = $mysqli->query("SELECT * FROM `engravers` WHERE `Key`='$Key'");

在您的查询中,您正在使用列key,这是不允许的,因为这是一个保留关键字。

人,你已经使用mysqli,为什么你还在你的查询中插入变量?这是将字符串$Key传递给解析器

的方法
$results = $mysqli->prepare("SELECT * FROM engravers WHERE `Key`= ?");
   $results->bind_param("s", $Key);
   while($row = $results->fetch_assoc()) {
       ... stuff ...
   }

如果这不起作用,我肯定不是因为准备好的语句有问题。

PD: key是保留字,所以请注意字段名是,用反引号括起来。