我一直在用这个问题绞尽脑汁,在每次搜索Google和Stack Overflow之后,我已经决定直接询问它。
我正在尝试创建一个使用PHP和MySQL来搜索数据库的页面,因为用户键入了关键字。我已经使用了几个关于这个主题的教程,它们都出现在前面且简单,但没有对我遇到的麻烦做出任何预测。
当我使用“SELECT * FROM charlist”时,它会返回所有行。但是当我使用“SELECT * FROM charlist WHERE Character ='”时。 $字符。 “'”,我收到以下错误:
错误:您的SQL语法出错;检查与MySQL服务器版本对应的手册,以便在第1行的'='X''附近使用正确的语法
X是用户输入的内容,如果没有输入任何内容,则为空白。
我做错了什么?
以下是完整代码:
<?php
$con = mysqli_connect("xxxx", "xxxxxxxx", "xxxxxxx", "xxxxxxxxxx");
if (!$con)
{
die('Could not connect: ' . mysqli_error($con));
}
$character = $_POST[character];
mysqli_select_db($con, "xxxxxxxx");
$sql = "SELECT * FROM charlist WHERE Character = '" . $character . "'";
$result = mysqli_query($con,$sql);
if (!$result) {
printf("Error: %s\n", mysqli_error($con));
exit();
}
echo "<table border='1'>
<tr>
<th>Character</th>
<th>Player</th>
</tr>";
while($row = mysqli_fetch_array($result))
{
echo '<tr style="border-color:#';
echo $row[Color];
echo ';">';
echo '<td style="border-style:solid;border-width:3px;"><a href="';
echo $row[url];
echo '">';
echo $row[Character];
echo '</a></td>';
echo '<td>';
echo $row[Player];
echo'</td>';
echo '</tr>';
}
echo '</table>';
mysqli_close($con);
?>
答案 0 :(得分:1)
更改此行
$character = $_POST[character];
到
$character = $_POST['character'];
你应该完成
答案 1 :(得分:0)
尝试使用以下内容转义$字符:
$ sql =“SELECT * FROM charlist WHERE Character ='”。 mysqli_real_escape_string($ character)。 “'”;
如果字符名称中有引号打破查询。
答案 2 :(得分:0)
将查询用作
"SELECT * FROM charlist WHERE Character ='$character'"
答案 3 :(得分:0)
启用PHP错误报告会有所帮助:
$character = $_POST[character];
// -----------^--------^
应该是:
$character = $_POST['character'];
此外,将变量直接插入到查询中是一种非常糟糕的做法,使您的站点容易受到SQL注入攻击。始终小心对待用户输入!
$sql = mysqli_real_escape_string($con, $sql);
希望这有帮助!