我加入了准备声明
//validate slug
$pro = $mysqli->prepare("SELECT
profiles.Image,
members.URLName,
members.DisplayName,
profiles.Pieces,
profiles.AboutMe,
profiles.DA,
profiles.TB,
profiles.SK
FROM `profiles`
INNER JOIN `members`
ON profiles.userID = members.ID
WHERE members.URLName = ?");
$pro->bind_param('s',$_GET['urlslug']);
$pro->execute();
$pro->store_result();
即使提供了预期的输入,它也不会返回任何内容。我相信这是因为我不能在输入中放置撇号(除非我想搜索URLSlug"?")。
我相信查询本身很好。如果我使用输入' user1'运行SQL在PHPMyAdmin中没有撇号,它告诉我:
#1054 - Unknown column 'user1' in 'where clause'
使用撇号,它可以正常工作
Showing rows 0 - 0 ( 1 total, Query took 0.0030 sec)
如何让我的准备声明在输入和工作中加入必要的撇号?
EDIT1: 输出:
var_dump($_GET['urlslug']) = string(5) "user1"
直接从PHPMyAdmin处理查询:
SELECT profiles.Image,
members.URLName,
members.DisplayName,
profiles.Pieces,
profiles.AboutMe,
profiles.DA,
profiles.TB,
profiles.SK
FROM `profiles`
INNER JOIN `members` ON profiles.userID = members.ID
WHERE members.URLName = 'user1'
编辑2:这不重复。我并没有问如何使用准备语句来防止SQL注入我说下面的语句没有撇号' user1'如何在没有撇号的情况下实现这一目标?"?"在我的准备声明中:
SELECT profiles.Image,
members.URLName,
members.DisplayName,
profiles.Pieces,
profiles.AboutMe,
profiles.DA,
profiles.TB,
profiles.SK
FROM `profiles`
INNER JOIN `members` ON profiles.userID = members.ID
WHERE members.URLName = user1
答案 0 :(得分:0)
他们希望这个作为答案。
准备好的陈述中没有什么特别的联接 在准备好的陈述中没有撇号是没有错的 只要您的代码不会产生任何错误,就意味着代码工作正常 您的代码是正确的,您的想法为什么不起作用。
如果它工作正常但没有结果,那么还有一些其他的,不那么智力的原因。如
答案 1 :(得分:0)
尝试清理$ _GET [' urlslug']并将其分配给变量,然后在bind_param语句中使用该变量。