首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用模拟原始mysql_real_escape_string的函数

使用模拟原始mysql_real_escape_string的函数
EN

Stack Overflow用户
提问于 2019-07-03 11:54:27
回答 1查看 203关注 0票数 2

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

代码语言:javascript
复制
<?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格式的,带有双引号和单引号,例如

代码语言:javascript
复制
<input type="radio" value="choice_3" checked="true"/> Eat pig's belly and swine's matrix

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

代码语言:javascript
复制
$query .= "'".mysql_escape_mimic($string)."', ";

我知道有某种语法错误,但我不知道如何修复它。有人能帮我吗?谢谢。

EN

回答 1

Stack Overflow用户

发布于 2019-07-03 12:08:09

我怀疑你的问题出在这一行上:

代码语言:javascript
复制
$query .= "'".mysql_escape_mimic($string)."', ";

这种连接将留下一个尾随的逗号,这几乎肯定会导致SQL中出现语法错误。在SQL中,任何用逗号分隔的术语集的末尾都不能有逗号。

在构建完连接字符串之后,您可以使用PHP修剪函数来修剪尾随的",“。

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

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

代码语言:javascript
复制
INSERT INTO table2 SELECT * FROM table1 WHERE condition;

如果这两个表没有相同的列,那么应该可以使用下面这样的代码:

代码语言:javascript
复制
INSERT INTO table2 (column1, column2, column3, ...)
SELECT columnA, columnB, columnC, ...
FROM table1
WHERE condition;

我直接从w3schools.com抄袭来的。您可以使用搜索字符串"mysql select from one table into a table“来搜索许多这样的示例。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56862695

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档