【问题标题】:SQL Server replacing apostrophes within php variablesSQL Server 替换 php 变量中的撇号
【发布时间】:2014-11-07 01:43:25
【问题描述】:

我正在尝试在 PHP 中删除 SQL Server 查询的某些字段中的撇号,尽管我在字符串模式部分中添加了额外的 ' 集,但当在结果中发现了撇号。我不确定我在这里做错了什么,任何帮助将不胜感激!

这部分代码循环遍历来自网络抓取的每一行结果,并将其放入每个结果的新表行中。该功能有效,但只要查询返回撇号,它就会出错并中断循环。

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>";
};

【问题讨论】:

    标签: php sql sql-server replace escaping


    【解决方案1】:

    当然可以。您正在尝试替换 SQL 本身中的撇号。考虑一下这个说法:

    replace('don't','''', '')
    

    SQL Server 应该如何评估它?它打开一个字符串,然后在三个字母后关闭该字符串,然后遇到错误的t 字符导致语法错误。

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

    无论如何,所有这一切都有一个非常巧妙的解决方案。 Prepared statements。完全不用担心报价,让引擎为您处理。例如:

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

    当然,这还有一个额外的好处,可以帮助保护您免受 SQL injection attacks 的侵害,您当前的代码很可能容易受到攻击。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-03
      • 1970-01-01
      • 2015-05-30
      相关资源
      最近更新 更多