Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server替换php变量中的撇号_Php_Sql_Sql Server_Replace_Escaping - Fatal编程技术网

SQL Server替换php变量中的撇号

SQL Server替换php变量中的撇号,php,sql,sql-server,replace,escaping,Php,Sql,Sql Server,Replace,Escaping,我试图在PHP中删除SQL Server查询的某些字段中的撇号,尽管我在字符串模式部分添加了额外的一组s,但在结果中发现撇号时仍然会出错。。我不确定我做错了什么,任何帮助都将不胜感激 这段代码循环遍历web刮取的每一行结果,并针对每个结果将其放入新的表行中。该功能可以工作,但只要查询返回撇号,它就会出错并中断循环 for($i = 1, $max = count($table); $i < $max; ++$i) { $dbrow = $table[$i]; $insquery = "IN

我试图在PHP中删除SQL Server查询的某些字段中的撇号,尽管我在字符串模式部分添加了额外的一组s,但在结果中发现撇号时仍然会出错。。我不确定我做错了什么,任何帮助都将不胜感激

这段代码循环遍历web刮取的每一行结果,并针对每个结果将其放入新的表行中。该功能可以工作,但只要查询返回撇号,它就会出错并中断循环

for($i = 1, $max = count($table); $i < $max; ++$i) {
$dbrow = $table[$i];
$insquery = "INSERT INTO db.schema.table (EVENT_ID, EVENT_CODE, DESCRIPTION, 
STATUS, SITE_STATUS, CITY, COUNTY, ZIP, STATE, STARTDATE, ENDDATE, YEARS_PRIOR, TOTAL_PRICE,
CUSTODIAN_FEE, ESTIMATED_FEES, FEE_TYPE, SD, PROGRAM, RC_LN, BUF_AMOUNT, LOC_PREM, 
ST_PREM, SNAPSHOT_DATE) VALUES('".$dbrow[0]."','".$dbrow[1]."', replace('".$dbrow[2]."','''', ''),'".$dbrow[3]."','".$dbrow[4]."', replace('".$dbrow[5]."','''', ''), replace('".$dbrow[6]."','''', ''),'".$dbrow[7]."','".$dbrow[8]."','".$dbrow[9]."','".$dbrow[10]."','".$dbrow[11]."','".$dbrow[12]."','".$dbrow[13]."','".$dbrow[14]."','".$dbrow[15]."', replace('".$dbrow[16]."','''', ''), replace('".$dbrow[17]."','''', ''), replace('".$dbrow[18]."','''', ''), replace('".$dbrow[19]."','''', ''),'".$dbrow[20]."','".$dbrow[21]."','".$dbrow[22]."');";
sqlsrv_query($conn, $insquery) or die ("Error in query: $insquery. ".sqlsrv_errors());
echo $insquery . "<br>";
};

当然有。您正在尝试替换SQL本身中的撇号。请考虑这个陈述:

replace('don't','''', '')
SQL Server应该如何评估这一点?它打开一个字符串,然后在三个字母后关闭该字符串,然后遇到错误字符,导致语法错误

查询本身必须在语法上有效,SQL才能执行它。SQL无法修复自己代码中的语法错误。您需要在中替换单引号,而不是在SQL中

无论如何,这一切都有一个很好的解决方案。根本不用担心引用,让引擎为您处理。例如:

$sql = "INSERT INTO Table_1 (id, data) VALUES (?, ?)";
$params = array(1, "some data");

$stmt = sqlsrv_query($conn, $sql, $params);
当然,这有助于保护您免受当前代码很可能容易受到的攻击