我尝试从一个表中提取一些信息并将其插入到另一个表中。我使用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)."', ";我知道有某种语法错误,但我不知道如何修复它。有人能帮我吗?谢谢。
发布于 2019-07-03 12:08:09
我怀疑你的问题出在这一行上:
$query .= "'".mysql_escape_mimic($string)."', ";这种连接将留下一个尾随的逗号,这几乎肯定会导致SQL中出现语法错误。在SQL中,任何用逗号分隔的术语集的末尾都不能有逗号。
在构建完连接字符串之后,您可以使用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 select from one table into a table“来搜索许多这样的示例。
https://stackoverflow.com/questions/56862695
复制相似问题