无法将新数据库连接转换为旧数据库连接

时间:2014-05-21 15:18:04

标签: mysql database-connection php4 php-5.4

我需要将这个新的数据库连接转换为从我的项目的数据库转换为旧时尚。我已经按照旧的时尚方式PHP 4.0完成了连接,但是我需要将这个PDO连接代码用于较旧的数据库连接,因为我不熟悉如何使用旧的数据库连接来使用和检索信息。 谢谢。

<?php 
  $pdo = new PDO('mysql:host=localhost;dbname=sitepoint', 'root', '*****');
  $opts = $_POST['filterOpts'];
  $qMarks = str_repeat('?,', count($opts) - 1) . '?';
  $statement = $pdo->prepare("SELECT mobile_phone.id, name, model, price FROM mobile_phone INNER JOIN brand ON brand_id = brand.id WHERE name IN ($qMarks)");
  $statement -> execute($opts);
  $results = $statement -> fetchAll(PDO::FETCH_ASSOC);
  $json = json_encode($results);
  echo($json);
?>

我已经尝试过这种方式与较旧的数据库连接性,但它没有给我任何东西:

$opts = $_POST['filterOpts'];
  $qMarks = str_repeat('?,', count($opts) - 1) . '?';
  $statement = "SELECT mobile_phone.id, name, model, price FROM mobile_phone INNER JOIN brand ON brand_id = brand.id WHERE name IN ($qMarks)";
  $statement1 = mysql_query($statement);
  $results = mysql_fetch_assoc($statement1);
  $json = json_encode($results);
  echo($json);

1 个答案:

答案 0 :(得分:0)

mysql_query (及相关)不支持绑定,因此最终查询如下 SELECT mobile_phone.id, name, model, price FROM mobile_phone INNER JOIN brand ON brand_id = brand.id WHERE name IN (?,?,?,?)

为了能够以与PDO相同的方式使用动态参数,您应该手动包装每个动态参数。

方法可以如下,

$opts = array();
foreach ($_POST['filterOpts'] as $filter) {
    $opts[] = '\'' . mysql_real_escape_string($filter) . '\'';
}

  $qMarks = implode(',', $opts);
  $statement = "SELECT mobile_phone.id, name, model, price FROM mobile_phone INNER JOIN brand ON brand_id = brand.id WHERE name IN ($qMarks)";
  $statement1 = mysql_query($statement);
  $results = mysql_fetch_assoc($statement1);
  $json = json_encode($results);
  echo($json);