gpt4 book ai didi

php - 从 MySQL INSERT 查询字符串中提取括号内的值

转载 作者:行者123 更新时间:2023-11-29 15:50:33 28 4
gpt4 key购买 nike

我们已经获得了数千个像这样的 MySQL INSERT 查询字符串:

$sql = INSERT INTO my_table VALUES ( 123, '456', 'Don't fail', 'hellow world' )

sql 字符串是在一个项目中刚刚给我们的。

问题在于,在某些查询中,某些字段值中间有单引号,因此在运行 mysqli_query($sql) 时,会抛出错误。

在我的示例中,如果我转义整个 $sql 字符串,它也会转义\'456\' 或\'Don\'t failed\',并且也会抛出错误,这就是为什么我需要单独提取和转义值,然后将 sql 查询放回一起。

我需要从括号内提取值并将它们放入数组中,这样我就可以单独转义它们。像这样的事情:

$vals[0] = 123
$vals[0] = 456
$vals[0] = Don't fail
$vals[0] = hellow world

有我可以使用的正则表达式吗?

我知道表“my_table”的列数。

还有其他解决办法吗?

谢谢

最佳答案

您可以创建一个匹配整个 SQL 字符串并捕获每个值的模式,而不是尝试转义撇号。

$pattern = "/(?:[ \w]+ \() (\d+), '(\d+)', '(.+?)', '(.+?)' \)/";

然后将这些值作为参数绑定(bind)到每个插入语句的准备好的语句。

$stmt = $mysqli->prepare('INSERT INTO my_table VALUES (?, ?, ?, ?)');

foreach ($inserts as $insert) {
preg_match($pattern, $insert, $matches);
list ($full, $a, $b, $c, $d) = $matches;
$stmt->bindValue("isss", $a, $b, $c, $d);
$stmt->execute();
}

关于php - 从 MySQL INSERT 查询字符串中提取括号内的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56781844/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com