我尝试过使用mysqli_real_escape_字符串转义查询字符串和包含撇号的$variable变量值来自数据库。我得到以下错误。
您的SQL语法有错误;请查看对应于MySQL服务器版本的手册,以获取在“\'Shamrock Rovers%\”附近和客场球队(如第1行的“St Patrick's Athletic%\”处使用的正确语法
撇号不会被比较值周围的引号转义。
以下是显示在PHP文件中的查询:

    $homeTeam = filter_input(INPUT_GET, 'homeTeam', FILTER_SANITIZE_STRING);
    $homePlayers = "select * from players where team_name like $homeTeam";
    $homePlayers = mysqli_real_escape_string($dbc, $homePlayers);
    $homePlayersResult = mysqli_query($dbc, $homePlayers);

并将其输出到浏览器:
    select * from players where team_name like Shamrock Rovers

我尝试了很多不同的方法,结果没有变化,我觉得我忽略了一些简单的事情。
提前谢谢。
编辑1
更新的代码
$homeTeam = filter_input(INPUT_GET, 'homeTeam', FILTER_SANITIZE_STRING);
$homeTeam = mysqli_real_escape_string($dbc, $homeTeam);
echo "<br>".$homeTeam."<br>";
$homePlayers = "select * from players where team_name like '$homeTeam%'";

$homePlayersResult = mysqli_query($dbc, $homePlayers);

此脚本从处理脚本接收3个参数
header("location: ../scorer.php?gameWeek=$gameWeek&homeTeam=$homeTeam&awayTeam=$awayTeam");

输出
从球队名称如“圣帕特里克竞技%”的球员中选择*
编辑2
在mysql命令窗口中输入查询之后,当我提交一次查询时不会发生任何事情,但是当我再次输入查询时,我会得到以下错误。

最佳答案

like $homeTeam";

你需要引用那个变量。
like '$homeTeam'";


like '$homeTeam%'";

因为这是一个字符串,根据您的like Shamrock Rovers
但是我不知道你为什么
$homePlayers = mysqli_real_escape_string($dbc, $homePlayers);
                                               ^^^^^^^^^^^^

转义查询时:(?)
$homePlayers = "select * from players where team_name like $homeTeam";
^^^^^^^^^^^^

你可能想用:
$homePlayers = mysqli_real_escape_string($dbc, $homeTeam);

考虑使用参数化查询,例如mysqli with prepared statementsPDO with prepared statements
编辑:(测试)
这是我用来成功查询我的测试表的东西,我是“用户”。
<?php

$DB_HOST = 'xxx';
$DB_USER = 'xxx';
$DB_PASS = 'xxx';
$DB_NAME = 'xxx';

$Link = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME);
if($Link->connect_errno > 0) {
  die('Connection failed [' . $Link->connect_error . ']');
}

$_GET['homeTeam'] = "St Patrick's Athletic";

$username = $_GET['homeTeam'];

$homeTeam = filter_input(INPUT_GET, 'homeTeam', FILTER_SANITIZE_STRING);
$homePlayers = mysqli_real_escape_string($Link, $homeTeam);
$homePlayers = "select * from users where username like '$homeTeam%'";
$homePlayersResult = mysqli_query($Link, $homePlayers);

echo "Names found like: " . $username;

echo "<br>";

 while($row = mysqli_fetch_array($homePlayersResult)){

echo $row['username'];

echo "<br>";

echo "<a href=\"{$row['my_row']}\">".$row['my_row']."</a>";

echo "<br>";

}

另外,确保您的列确实是VARCHAR,并且它的长度足够长,并且您的输入是“文本类型”。
旁注:
您不需要这样做,这将打断您的查询:
$homeTeam = filter_input(INPUT_GET, 'homeTeam', FILTER_SANITIZE_STRING);

因为您已经在使用mysqli_real_escape_string()清理输入。
我们在聊天过程中讨论过的一些事情已经解决了,但在聊天之前我已经提到了上述问题,毕竟这是解决问题的办法。

10-06 04:08
查看更多