使用模仿原始mysql_real_escape_string的函数

时间:2019-07-03 03:54:27

标签: php mysql

我尝试从一个表中提取一些信息并将其插入到另一个表中。我正在使用https://php.net/mysql_real_escape_string中的以下函数来处理转义字符。

<?php 
function mysql_escape_mimic($inp) { 
    if(is_array($inp)) 
        return array_map(__METHOD__, $inp); 

    if(!empty($inp) && is_string($inp)) { 
        return str_replace(array('\\', "\0", "\n", "\r", "'", '"', "\x1a"), array('\\\\', '\\0', '\\n', '\\r', "\\'", '\\"', '\\Z'), $inp); 
    } 

    return $inp; 
} 
?>

我处理的字符串是html形式,带有双引号和单引号,例如

<input type="radio" value="choice_3" checked="true"/> Eat pig's belly and swine's matrix

我必须使用字符串连接来编写查询,因为列名和表名是动态的。

$query .= "'".mysql_escape_mimic($string)."', ";

我知道存在某种语法错误,但我不知道如何解决。有人可以帮我吗?谢谢。

1 个答案:

答案 0 :(得分:1)

我怀疑您的问题出在这行:

$query .= "'".mysql_escape_mimic($string)."', ";

该串联将留下结尾逗号,这几乎可以肯定会在您的SQL中引起语法错误。在SQL中,要用逗号分隔的任何术语集都必须 not 在其末尾带有逗号。

在完成串联字符串的构建后,可以使用PHP修整功能来修整尾随的“,”。


我还要指出,您可以完全在数据库内完成您声明的目标(“从一个表中提取某些信息并将其插入到另一个表中”)。也就是说,您无需将其选择到应用程序中,然后将其重新插入到另一个表中,从而完全避免了此问题。

如果两个表具有相同的列,则应执行以下操作:

INSERT INTO table2 SELECT * FROM table1 WHERE condition;

如果两个表没有相同的列,则应执行以下操作:

INSERT INTO table2 (column1, column2, column3, ...)
SELECT columnA, columnB, columnC, ...
FROM table1
WHERE condition;

我直接从w3schools.com抄袭了这些。您可以使用搜索字符串“ mysql从一个表到另一个表中进行选择”来搜索许多此类示例。