我的$POST
值是“WYNN'S”。当我通过Yii2框架创建一个SQL查询时:
$vendor = (new Query()) ->select('VendorNo') ->distinct() ->from('Pm_Item i') ->innerJoin('[PurchPrice] [p]', 'p.ItemNo = i.ItemNo AND p.CompanyKey = i.CompanyKey') ->where($condition)->all();
我收到错误:
Incorrect syntax near 'S'.
The SQL being executed was: SELECT DISTINCT [TopCode] FROM [PM_Item] WHERE Brand IN( 'WYNN'S')
如何使用php将'WYNN''替换为'WYNN'''?
更新:
$condition = '';
$i = 0;
foreach ($filters as $filter) {
if (isset($filter['selected'])) {
if (strpos( $filter['selected']['value'], "'") !== false) {
$filter['selected']['value'] = str_replace("'", "''", $filter['selected']['value']); //preg_replace('/\'/', '\'\'', $filter['selected']['value']);
}
if ($i != 0 AND $filter['selected']['value'] != '') {
$condition .= ' AND i.' . $filter['column'] . ' = \'' . $filter['selected']['value'] . '\'';
} elseif ($filter['selected']['value'] != '') {
$condition .= 'i.' . $filter['column'] . ' = \'' . $filter['selected']['value'] . '\'';
}
$i++;
}
}
答案 0 :(得分:1)
使用addslashes()为字符串
的特殊字符添加反斜杠$str = addslashes("WYNN'S");
然后传递给sql查询。
答案 1 :(得分:0)
str_replace()函数似乎这样做:
<?php
$query = str_replace("'", "''" , $query);
?>
这将取代每一次出现的事情。其中2个:&#39;&#39;。
答案 2 :(得分:0)
你应该转义sql语句中的特殊字符
如果您使用的是 mysqli 扩展,请使用 mysqli :: real_escape_string 来翻译字符串中的特殊字符,以便在SQL语句中使用(包括单引号)
// Query
$query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'",
mysql_real_escape_string($user),
mysql_real_escape_string($password));
对于 PDO 扩展,请使用 PDO :: quote 或 PDO准备
如果您使用的是不推荐使用的mysql扩展,则可以使用 mysql-real-escape-string
http://php.net/manual/en/function.mysql-real-escape-string.php
示例:
$lastname = "O'Reilly";
$_lastname = mysql_real_escape_string($lastname);
$query = "SELECT * FROM actors WHERE last_name = '$_lastname'";
答案 3 :(得分:0)
我更喜欢编写一个转义函数,并将其用于查询中的每个值:
function escape_sql(string $string)
{
return str_replace("'", "''", $string);
}
$query = "SELECT DISTINCT [TopCode]
FROM [PM_Item]
WHERE Brand IN( '". escape_sql("WYNN'S"). "')";
?>
或者选择PDO方法,让PHP可以使用->prepare()
和->bindValue()
答案 4 :(得分:0)
我注意到你使用yii已经太晚了。
部分 - &gt; where()不一定是这样的:
- &gt; where(['in','Brand',[“WYNN'S”]])
根据http://www.yiiframework.com/doc-2.0/yii-db-query.html#where()-detail,这将导致由yii
逃避