我尝试从一个表中提取一些信息并将其插入到另一个表中。我正在使用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)."', ";
我知道存在某种语法错误,但我不知道如何解决。有人可以帮我吗?谢谢。
答案 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从一个表到另一个表中进行选择”来搜索许多此类示例。