MySQL SELECT,然后在第一个 table 中有特殊字符时保存或更新为不同的 table。 leave_my_text_alone();
MySQL SELECT and then save or update to a different table when special characters are in the first table. leave_my_text_alone();
我已将文本正确保存到 mariahDB 10.2 数据库中。使事情复杂化的文本实际上是正则表达式和某人发明的混合代码的组合 else.It 可以在另一个应用程序中作为文本文件而不加改动地使用 - 而不是 PHP。但它只是在一天结束时发短信。我想从这个 table 中抓取数据,对其进行少量更改,然后将其保存在一个新的 table 中。
问题不在于对原始数据的更改太多,而在于选择并保存充满反斜杠、单引号和双引号的数据到新的 table 而没有更改时被保存。 PHP 和 MySQL 中是否有一种简单的方法可以从 table 中获取文本并按原样重新保存它,以便第二个 table 与第一个没有区别?
例如第一个 table 中有以下内容。
add list to list(%section,$plugin function("XpathPlugin.dll", "$Generic Xpath Parser", $document text, "//p[1]/a[@class=\'result-title hdrlnk\' and 1]", "outerhtml", "False"),"Don\'t Delete","Global")
但是,如果我将它放入一个变量中,然后将其插入或更新到另一个 table,MySQL 似乎会删除反斜杠,或者添加反斜杠并抛出格式不正确的错误 SQL。
例如 Don\'t Delete
变成 Don't Delete
而在其他例子中 \
变成 \
在另一种情况下,?=\")"
失去反斜杠并变为 ?=")"
我已经尝试了几十种PHP函数的组合来单独保留文本,例如addslashes(),htmlentities(),preg_replace(),各种字符串替换,没有得到数据回到 table 和出来时一样。
有没有人有办法做到这一点?我会调用函数 leave_my_text_alone(); !!
编辑
要添加一些无法获取变量的技巧,我可以更新到我尝试过的数据库中
$omnibotScript = addcslashes($omnibotScript,"'");
然后我发现我需要这样做两次,以考虑从不要删除中的撇号之前删除反斜杠....否则会抛出 MySQL 解析错误..再做一次固定那个。所以我不得不把两个反斜杠放回去以删除一个。然后我添加了这个以考虑将双反斜杠减少为单反斜杠。
$pattern = '/\\"/';
$replacement = '\\\\"';
$omnibotScript = preg_replace($pattern, $replacement, $omnibotScript);
但清单还在继续。
使用准备好的语句。
如果您使用准备好的语句,MySQL 将处理您需要的所有转义,以便将字符串返回到 table 中,就像它从中出来时一样。例如,使用 MySQLi
:
$query = "SELECT s1 FROM t1";
if (!$result = $con->query($query)) {
exit($con->error);
}
$row = $result->fetch_assoc();
$value = $row['s1'];
$query = "INSERT INTO t2(s1) VALUES (?)";
$stmt = $con->prepare($query);
$stmt->bind_param('s', $value);
$stmt->execute();
t2
中 s1
的值将 与 t1
中的值 完全相同。
我已将文本正确保存到 mariahDB 10.2 数据库中。使事情复杂化的文本实际上是正则表达式和某人发明的混合代码的组合 else.It 可以在另一个应用程序中作为文本文件而不加改动地使用 - 而不是 PHP。但它只是在一天结束时发短信。我想从这个 table 中抓取数据,对其进行少量更改,然后将其保存在一个新的 table 中。
问题不在于对原始数据的更改太多,而在于选择并保存充满反斜杠、单引号和双引号的数据到新的 table 而没有更改时被保存。 PHP 和 MySQL 中是否有一种简单的方法可以从 table 中获取文本并按原样重新保存它,以便第二个 table 与第一个没有区别?
例如第一个 table 中有以下内容。
add list to list(%section,$plugin function("XpathPlugin.dll", "$Generic Xpath Parser", $document text, "//p[1]/a[@class=\'result-title hdrlnk\' and 1]", "outerhtml", "False"),"Don\'t Delete","Global")
但是,如果我将它放入一个变量中,然后将其插入或更新到另一个 table,MySQL 似乎会删除反斜杠,或者添加反斜杠并抛出格式不正确的错误 SQL。
例如 Don\'t Delete
变成 Don't Delete
而在其他例子中 \
变成 \
在另一种情况下,?=\")"
失去反斜杠并变为 ?=")"
我已经尝试了几十种PHP函数的组合来单独保留文本,例如addslashes(),htmlentities(),preg_replace(),各种字符串替换,没有得到数据回到 table 和出来时一样。
有没有人有办法做到这一点?我会调用函数 leave_my_text_alone(); !!
编辑
要添加一些无法获取变量的技巧,我可以更新到我尝试过的数据库中
$omnibotScript = addcslashes($omnibotScript,"'");
然后我发现我需要这样做两次,以考虑从不要删除中的撇号之前删除反斜杠....否则会抛出 MySQL 解析错误..再做一次固定那个。所以我不得不把两个反斜杠放回去以删除一个。然后我添加了这个以考虑将双反斜杠减少为单反斜杠。
$pattern = '/\\"/';
$replacement = '\\\\"';
$omnibotScript = preg_replace($pattern, $replacement, $omnibotScript);
但清单还在继续。
使用准备好的语句。
如果您使用准备好的语句,MySQL 将处理您需要的所有转义,以便将字符串返回到 table 中,就像它从中出来时一样。例如,使用 MySQLi
:
$query = "SELECT s1 FROM t1";
if (!$result = $con->query($query)) {
exit($con->error);
}
$row = $result->fetch_assoc();
$value = $row['s1'];
$query = "INSERT INTO t2(s1) VALUES (?)";
$stmt = $con->prepare($query);
$stmt->bind_param('s', $value);
$stmt->execute();
t2
中 s1
的值将 与 t1
中的值 完全相同。