【问题标题】:How to escape a dot in mysql query?如何在mysql查询中转义一个点?
【发布时间】:2010-12-15 20:02:23
【问题描述】:

数组 $rf 的值包含一个点:

  $rf = array(img34563.jpg , img34536.jpg);

  $query = "SELECT * FROM $appin_table WHERE img IN ( ".implode( ',' , $rf )."";
  $result = mysql_query($query)
  or die(mysql_error());

我怎么能逃脱这个点,这可能吗?

提前致谢。

【问题讨论】:

  • 数组的内容是什么 - 字符串还是数字? img 列的数据类型是什么?
  • 也许是个愚蠢的回应,但你确定你不是指$rf = array("img34563.jpg" , "img34536.jpg");
  • 这些值来自一个包含我在这里写下的值类型的 post 变量,我尝试添加双引号但没有帮助。
  • @OMG Ponies: See array.. 如果我删除查询中的 WHERE 条件,它会打印出我数据库中的所有内容。

标签: mysql arrays escaping


【解决方案1】:

单独转义点对你没有帮助;你最终会得到这样的查询:

SELECT * FROM table WHERE img IN(img34563.jpg , img34536.jpg)

您必须先应用引号:

function quote($k)
   {
      return '"' . mysql_real_escape_string($k) . '"';
   }

$values = array_map('quote', $rf);
$query = "SELECT * FROM $appin_table WHERE img IN ( ".implode( ',' , $values )."";

【讨论】:

  • 试过了,不行:你的SQL语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“jpg,1292426006.jpg,1292426169.jpg,1292426916.jpg”附近使用正确的语法
  • 嗯。我知道你为什么会出现这个错误。最后一行是implode(',', $rf),但应该是implode(',', $values)。我编辑了
  • 谢谢,它正在工作!但是,在上面的代码中,最后两个双引号之间缺少一个 ')'。
【解决方案2】:

为避免转义,请使用准备好的语句:

$rf = array('img34563.jpg', 'img34536.jpg');

$db_connection = new mysqli("localhost", "user", "pass", "db");
$statement = $db_connection->prepare("SELECT * FROM $appin_table WHERE img IN (?,?)");
$statement->bind_param("ss", $rf[0], $rf[1]);
$statement->execute();

更多信息:http://www.php.net/manual/en/mysqli.prepare.php

【讨论】:

  • 尽可能使用准备好的语句
  • 感谢您的回答。为什么准备好的语句比转义语句更好?
  • @Ben:Prepared statements 在避免 SQL 注入方面非常有帮助,因为它将 SQL 语句与实际值分开。
猜你喜欢
  • 2021-04-08
  • 1970-01-01
  • 1970-01-01
  • 2021-02-09
  • 1970-01-01
  • 1970-01-01
  • 2016-03-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多