我需要在mysql数据库中替换单引号,并使用脚本来执行此操作。它适用于其他角色但是当涉及单引号时它根本不起作用。
$sql[$handle]['sql'] = 'UPDATE '.$table.' SET '.$field.' = REPLACE('.$field.',\''.$search[$i].'\',\''.$replace[$i].'\')'
尝试替换单引号时出现此错误:
您的SQL语法有错误;检查手册 对应于您的MySQL服务器版本,以便使用正确的语法 靠近'''''''''在第1行)
这是我用来搜索引号的字符串:$search[] = ('\'');
答案 0 :(得分:2)
您需要转义$search
,因为您传递的是单引号 - 所以当它转到MySQL时,它看起来像这样:'''
。加上这个:
$search[$i] = addslashes($search[$i]);
使用preparing statements来避免转义和SQL注入问题会更好。
答案 1 :(得分:0)
使用prepared statements和?
占位符。此示例使用PEAR DB package。
<?php
// import the PEAR DB module
require_once("DB.php");
// connect
$dsn = "mysqli://tehUserName:tehPassWord@db.example.com/tehDatabase";
$conn = DB::connect($dsn);
// note the question marks, `?`, used for the string values
$statement = 'UPDATE '.$table.' SET '.$field.' = REPLACE(?, ?, ?)';
$result = $conn->query ($statement, [ $field, $search[$i], $replace[$i] ]);
// ...
PEAR数据库软件包已经被取代了,我认为 - 自从我编写PHP代码以来已经有一段时间了 - 但这个代码片段演示了预处理语句和占位符。
不使用PEAR DB包,您仍然可以使用预处理语句和占位符,但我不确定。 (如果有人想要编辑此问题......)请参阅article on Prepared Statements on php.net。