MySQL Select ... Where子句返回语法错误

时间:2013-08-17 01:35:48

标签: php mysql select syntax where

我一直在用这个问题绞尽脑汁,在每次搜索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);
?>

4 个答案:

答案 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);

希望这有帮助!