【问题标题】:MySQLi query to MySQL queryMySQLi 查询到 MySQL 查询
【发布时间】:2012-07-19 06:03:13
【问题描述】:

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

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

array('Manuel', 'StackOverflow');

我有这个问题..

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

所以,我想按顺序将问号替换为这些值,因此 Manuel 先行,然后再行 StackOverflow。记住我需要在这些值的两侧添加 -> '

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

感谢任何帮助!

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

【问题讨论】:

  • 您不应该使用 mysql 的原因是,正如您所见,它使开发人员尝试做正确的事情变得更加困难
  • Mhm .. 我同意你的看法,如果我找不到如何做到这一点,我将删除该功能 :)

标签: php mysql arrays mysqli


【解决方案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 不接受。

【讨论】:

    【解决方案2】:

    我会这样做(有一个例外:我不会使用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 (impoded $result) $query_end

    implode - PHP Manual

    【讨论】:

      猜你喜欢
      • 2012-05-03
      • 2013-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多