我已经关注这个问题好几天了。起初我认为问题是在绑定参数,但我已经简化回一个基本的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是保留字,所以请注意字段名是,用反引号括起来。