我一直试图破解这个2个小时,但有些事情是错的。我非常习惯于在没有mysqli的情况下做事,但是读到有一个建议从常规mysql命令转向它。因此我坚持以下:
<?php
$mysqli = new mysqli('localhost', 'admin', 'test123', 'kadmindb');
if ($result = $mysqli->query("SELECT * FROM records WHERE '$queryType' = '$keyword'")) {
while ($row = $result->fetch_object()) {
echo "<h2>Result:</h2><br>";
echo "ID: " . $row->id . "<br>";
echo "Name: " . $row->cust_name . "<br>";
echo "Invoice No: " . $row->invoice_num . "<br>";
echo "Date: " . $row->date_recorded . "<br>";
}
}
?>
此代码显示在页面中,其中应显示查询结果但不显示任何内容。我检查了关键字和queryType变量都已设置,它们包含正确的值。任何帮助将不胜感激。我所要做的就是:select语句根据提交的invoice_num检索所有细节。
编辑:从我收到的帮助中,我得到了这个工作:$query = "SELECT * FROM records WHERE ".$queryType. " LIKE '%$keyword%' ";
if ($result = $mysqli->query($query)) {
while ($row = $result->fetch_object()) {
echo "<h2>Result:</h2><br><hr/> ";
echo "ID: " . $row->id . "<br>";
echo "Name: " . $row->cust_name . "<br>";
echo "Invoice No: " . $row->invoice_num . "<br>";
echo "Date: " . $row->date_recorded . "<br>";
echo "<hr/>";
}
}
答案 0 :(得分:1)
您确定要选择哪些数据?如果实际存在,此代码将仅输出数据。
确保设置$queryType
和$keyword
,并且具有可产生结果的合理值。
在查询之前立即使用var_dump($queryType)
和var_dump($keyword)
。现在检查你的输出。它们都是字符串吗?直接在PHPMyAdmin中运行此查询并检查您获得的行数。
如果你不能这样做,请尝试回显与查询值一起返回的行数:
if ($result = $mysqli->query("SELECT * FROM records WHERE $queryType = '$keyword'"))
{
while ($row = $result->fetch_object())
{
echo "<h1>Query WHERE '$queryType' = '$keyword' yielded {$result->num_rows} rows!</h1>";
echo "<h2>Result:</h2><br>";
...
注意,你不应该在列($ queryType)周围有单引号,如果你坚持你应该使用反引号引号(`)但实际上并不必要 - 如果你是那么迂腐你应该使用预备语句。
还要确保过滤掉任何可能允许sql注入的潜在危险值。请参阅:mysqli::real_escape_string
答案 1 :(得分:1)
假设$queryType
是记录表中列的名称,那么我认为问题是你的WHERE子句。
而不是:
$mysqli->query("SELECT * FROM records WHERE '$queryType' = '$keyword'")
你应该:
$mysqli->query("SELECT * FROM records WHERE {$queryType} = '{$keyword}'")
请注意,我删除了$queryType
周围的单引号并使用了complex (curly) syntax
此外,将来您可能希望尝试使用else
块来捕获错误:
$mysqli = new mysqli('localhost', 'admin', 'test123', 'kadmindb');
if ($result = $mysqli->query("SELECT * FROM records WHERE {$queryType} = '{$keyword}'")) {
while ($row = $result->fetch_object()) {
echo "<h2>Result:</h2><br>";
echo "ID: " . $row->id . "<br>";
echo "Name: " . $row->cust_name . "<br>";
echo "Invoice No: " . $row->invoice_num . "<br>";
echo "Date: " . $row->date_recorded . "<br>";
}
}
else
{
echo "Error: " . $mysqli->error;
}