我尝试过使用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 statements或PDO 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()
清理输入。我们在聊天过程中讨论过的一些事情已经解决了,但在聊天之前我已经提到了上述问题,毕竟这是解决问题的办法。