将PDO准备好的语句传递给变量

时间:2013-12-31 23:13:49

标签: php pdo

我正在使用预准备语句将提交的信息上传到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()

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

谢谢!

2 个答案:

答案 0 :(得分:2)

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

$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);

通过这种方式,您可以确切地知道将要发送的值。

答案 1 :(得分:0)

您可以$stmt->queryString获取语句中使用的SQL查询。 如果你想保存整个$ stmt变量(我看不清楚原因),你可以复制它。它是PDOStatement的一个实例,所以存储它显然没有优势。