【问题标题】:Matching names in database匹配数据库中的名称
【发布时间】:2013-12-17 20:02:20
【问题描述】:

我有一张表,我想在其中匹配 fnamelname

我的查询是

$result = $mysqli->query('SELECT * FROM user_friend_detail WHERE userId = "'.$_SESSION["userId"].'" AND FriendFirstName = "'.mysql_real_escape_string($firstName).'" AND FriendLastName = "'.mysql_real_escape_string($lastName).'"   AND   FriendStatusCode="verified" AND friendId!='.$fid.' ')  or die($mysqli->error);

问题是如果我写名字Joh'nny,'的名字不匹配,我该如何解决?

【问题讨论】:

  • 如果你使用*_real_escape_string和MySQLi,你必须使用mysqli_real_escape_string(注意I)。

标签: php mysql string mysql-error-1064 mysql-escape-string


【解决方案1】:

既然您已经在使用 mysqli,您不妨使用prepared statements,这样您就不必担心进行正确的转义:

$stmt = $mysqli->prepare('SELECT * 
    FROM user_friend_detail 
    WHERE userId = ? AND FriendFirstName = ? AND FriendLastName = ?   
      AND   FriendStatusCode="verified" AND friendId <> ?');

$stmt->bind_param('issi', $_SESSION['userId'], $firstName, $lastName, $fid);
$stmt->execute();

另请参阅:mysqli::prepare()

更新

另外,你可能启用了魔术引号,你应该switch it off

【讨论】:

  • 我不是在问 SQL 注入,我想在我的名字中有 ' 时得到结果
  • @user1765876 在这种情况下,这两个(SQL 注入和变量内的引号)碰巧彼此共享一个共性。
  • @user1765876 你可能想看看你是否启用了magic quotes btw。
  • 这是一个纯 SQL 问题,如果 ' 存在于 Fname 或 lname 中,我没有得到结果
  • @user1765876 如果即使这个答案你也没有得到任何结果,那么你肯定启用了魔术引号。这会将' 变成\' 并导致不匹配。
猜你喜欢
  • 1970-01-01
  • 2021-03-11
  • 1970-01-01
  • 2015-07-05
  • 2012-10-05
  • 1970-01-01
  • 2021-12-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多