【问题标题】:Pass PDO prepared statement to variables将 PDO 准备好的语句传递给变量
【发布时间】:2013-12-31 23:13:48
【问题描述】:

我正在使用准备好的语句将提交的信息上传到 MYSQL 数据库。我想知道如何将我准备好的语句传递给一个单独的变量,以便我可以发布上传内容的摘要。下面是代码:

$stmt = $dbh->prepare("INSERT INTO photos (Name, Type, Price, Description, Location,    status, id) 
VALUES (:item_name, :item_type, :item_price, :item_description, :image_location, :status, :id)");
$stmt->bindValue(':item_name', $_POST['item_name']);
$stmt->bindValue(':item_type', $_POST['item_type']);
$stmt->bindValue(':item_price', $_POST['item_price']);
$stmt->bindValue(':item_description', $_POST['item_description']);
$stmt->bindValue(':image_location', 'images/'.$_FILES['file']['name']);
$stmt->bindValue(':status', 0);
$stmt->bindValue(':id', 0);

try{
    $stmt->execute();
}catch(PDOException $e){
    $errors[] = $item_name . "not saved in database.";
    echo $e->getMessage();

我想我的问题是:PHP 如何存储 $stmt 变量然后执行它?是

$stmt->execute()

被视为一个数组?如果是这样,我如何访问每个准备好的值,以便发布每个值的摘要?

谢谢!

【问题讨论】:

  • 那么,您是否想查看诸如$_POST['item_name']); 之类的内容,或者“放入变量”之后的最终语句是什么样的?第一个很容易,第二个不可能(无需进入 mysql 并查看最近对您的数据库运行了哪些查询)。
  • 是的,我想查看每个单独提交的 $_POST['item_name'] 的具体实例,以便我可以回显所提交信息的摘要。我能看到的唯一方法是创建单独的变量并再次提取 $_POST['item_name'] 。我想使用已经存储在 $stmt 变量中的内容。

标签: php pdo


【解决方案1】:

您可以仅在->execute() 时传递数据,而不是使用->bindParam()

$data = [
  ':item_name' => $_POST['item_name'],
  ':item_type' => $_POST['item_type'],
  ':item_price' => $_POST['item_price'],
  ':item_description' => $_POST['item_description'],
  ':image_location' => 'images/'.$_FILES['file']['name'],
  ':status' => 0,
  ':id' => 0,
];

$stmt->execute($data);

通过这种方式,您将确切知道要发送哪些值。

【讨论】:

    【解决方案2】:

    您可以通过$stmt->queryString 获取语句中使用的 SQL 查询。 如果你想保存整个 $stmt 变量(我不明白为什么),你可以复制它。它是 PDOStatement 的一个实例,因此存储它显然没有任何优势。

    【讨论】:

      猜你喜欢
      • 2020-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多