为什么赢得我的WHERE查询工作?

时间:2014-08-20 11:38:21

标签: php mysqli where

我已经有几天了。起初我认为问题在于绑定参数,但我已经简化回基本的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>

3 个答案:

答案 0 :(得分:1)

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

相同的保留关键字在MySQL中。

如果你使用其中一个只用``

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

如果这不起作用,我确定不是因为准备好的陈述是问题。

PD:key是保留字,因此请注意字段名称包含在反引号中