用PHP mysqli编写MySQL连接语句

时间:2014-05-27 05:42:56

标签: php mysqli prepared-statement

我加入了准备声明

//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

2 个答案:

答案 0 :(得分:0)

他们希望这个作为答案。

准备好的陈述中没有什么特别的联接 在准备好的陈述中没有撇号是没有错的 只要您的代码不会产生任何错误,就意味着代码工作正常 您的代码是正确的,您的想法为什么不起作用。

如果它工作正常但没有结果,那么还有一些其他的,不那么智力的原因。如

  • 您正在连接到其他数据库
  • 没有要返回的数据
  • 你拼错了一些变量或字段名称
  • 您实际上并未在代码中获取结果
  • 您无法在代码中正确获取结果
  • 其他类似的东西。

答案 1 :(得分:0)

尝试清理$ _GET [' urlslug']并将其分配给变量,然后在bind_param语句中使用该变量。