无法将新数据库连接转换为旧数据库连接
Posted
技术标签:
【中文标题】无法将新数据库连接转换为旧数据库连接【英文标题】:Cannot convert new database connection to older one 【发布时间】:2014-07-10 08:16:24 【问题描述】:我需要为我的项目转换这个新的数据库连接并将数据库中的信息检索到旧的方式。我已经按照旧式方式 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】: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);
【讨论】:
以上是关于无法将新数据库连接转换为旧数据库连接的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 Confluent Elasticsearch 接收器连接器将 Kafka 主题数据转换为结构化 JSON
猎豹MFC--CFile类家族介绍ADO连接数据库 打开数据库 关闭数据库 连接字符串
猎豹MFC--CFile类家族介绍ADO连接数据库 打开数据库 关闭数据库 连接字符串