1

我正在尝试为我的框架提供多驱动程序支持,这基本上意味着我可以轻松使用 MySQL、MySQLi 或 PDO(MySQL)。

所以,假设我有一个要插入的值数组。

array('Manuel', 'StackOverflow');

我有这个查询..

mysql_query("INSERT INTO users(name, fav_site) VALUES(?, ?)");

所以,我想按顺序用这些值替换问号,所以 Manuel 先去,然后是 StackOverflow。请记住,我需要在这些值的两侧添加 -> ' <- 以便 MySQL 不会引发错误。

我试过搜索是否有人问过这个并且没有运气。

任何帮助表示赞赏!

注意:我知道我什至不应该为 MySQL 烦恼,但是,嘿!一个特点就是一个特点。

4

2 回答 2

1
<?php
$query = "INSERT INTO users(name, fav_site) VALUES(?, ?)";
$args = array('joe', 'google goggles');
while(strpos($query, '?') !== FALSE)
{
  $query = preg_replace('/\?/', your_quoting_func(array_shift($args)), $query, 1);
}
echo $query;

基本上,这说......虽然还有一个?保留在字符串中,删除第一个问号并将其替换为带引号的(使用您自己的函数或 mysql_real_escape_string 并用单引号括起来)字符串,然后将该项目移出数组。你应该可能substr_count?标记与错误检查的参数数量。

我使用 preg_replace 是因为它接受指定要替换多少值的参数,而 str_replace 不接受。

于 2012-07-20T00:44:21.880 回答
0

我会这样做(有一个例外:我不会使用mysql_):

<?php
$values = array('foo', 'bar');

$query_start = "INSERT INTO `users` (`name`, `fav_site`) VALUES ('";
$query_end = "')";

$query = $query_start . implode("', '", $values) . $query_end;

$result = mysql_query($query);
?>

$query_start包含 MySQL 查询的开头(注意'结尾处的),并$query_end在结尾处进行。

然后$values被内爆,', '作为“胶水”,并$result设置为:

$query_start强加$result$query_end

See implode - PHP Manual.

于 2012-07-20T01:03:02.980 回答