1

我一直在为这个问题绞尽脑汁,在谷歌和 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);
?>
4

4 回答 4

1

更改此行

$character = $_POST[character];

$character = $_POST['character'];

你应该通过

于 2013-08-17T01:41:09.313 回答
0

尝试转义 $character 使用:

$sql = "SELECT * FROM charlist WHERE Character = '" 。mysqli_real_escape_string($character) 。"'";

如果字符名称中有引号会破坏查询。

于 2013-08-17T01:39:32.713 回答
0

使用查询作为

"SELECT * FROM charlist WHERE Character ='$character'"
于 2013-08-17T01:40:15.037 回答
0

打开 PHP 错误报告会有所帮助:

$character = $_POST[character];
//       -----------^--------^

应该:

$character = $_POST['character'];

此外,将变量直接插入查询是一种非常糟糕的做法,并且会使您的站点容易受到 SQL 注入的攻击。始终小心对待用户输入!

$sql = mysqli_real_escape_string($con, $sql);

希望这可以帮助!

于 2013-08-17T01:46:39.130 回答