【问题标题】:Using a passed variable in a query using PDO在使用 PDO 的查询中使用传递的变量
【发布时间】:2011-10-26 14:01:29
【问题描述】:

我正在尝试获取从另一个页面传递的变量并在 PDO 查询中使用它。变量是添加记录的日期,我正在尝试返回所有较新的记录。我是否在 PDO 中为此使用 $_POST?

<?php
require_once('globals.php');

$date_added = $_POST['date_added'];

$sth = $dbh->prepare("SELECT * FROM games WHERE date_added > $date_added");
$sth->execute();

/* Fetch all of the remaining rows in the result set */
print("Fetch all of the remaining rows in the result set:\n");
$result = $sth->fetchAll();
print_r($result);


?>

【问题讨论】:

  • 有效吗?如果不是:您看到的错误是什么?这里的一个问题是您直接在查询中获取用户数据 - 使用准备好的语句或 $dbh->quote()
  • 这是错误:致命错误:在非对象上调用成员函数 prepare()。
  • @DonS 您从一开始就没有成功的数据库连接。你真的在某个地方打电话给new PDO(),比如globals.php吗?
  • @DonS 即使它不是公共表单,您也应该在准备好的语句中绑定$date_added
  • @johannes 非用户数据呢?可以按原样输入查询吗?

标签: php mysql pdo


【解决方案1】:

您需要通过在$dbh 中创建一个新的 PDO 对象来实际建立与数据库的连接。下面的代码假定数据库用户和密码为$dbusername, $dbpassword,数据库名为$nameofdb

$date_addedprepare() 调用中被替换为参数:dateadded,然后通过数组传递给execute() 调用。

请阅读PDO::__construct()PDO::execute() 的文档

<?php
require_once('globals.php');

// Connect to MySQL via PDO
try {
    $dbh = new PDO("mysql:dbname=$nameofdb;host=localhost", $dbusername, $dbpassword);
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}

$date_added = $_POST['date_added'];

// Replace `$date_added` with a parameter `:dateadded`
$sth = $dbh->prepare("SELECT * FROM games WHERE date_added > :dateadded");
// bind $date_added and pass it into the execute() call inside an array
$sth->execute(array('dateadded'=>$date_added));

/* Fetch all of the remaining rows in the result set */
print("Fetch all of the remaining rows in the result set:\n");
$result = $sth->fetchAll();
print_r($result);

?>

【讨论】:

  • 谢谢迈克尔!这很完美。也感谢 PDO 链接。
  • 如果我想 json 结果而不是打印它,代码应该是:'$json=json_encode($result);'而不是:'print_r($result);'最后一行?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-19
  • 2021-03-20
  • 2014-11-18
  • 1970-01-01
  • 1970-01-01
  • 2013-03-15
相关资源
最近更新 更多