PHP8 PDOStatement::execute

2024-03-26 09:50 更新

(PHP 5 >= 5.1.0, PHP 7, PHP 8, PECL pdo >= 0.1.0)

PDOStatement::execute — 執(zhí)行預(yù)處理語句

說明

public PDOStatement::execute(?array $params = null): bool

執(zhí)行預(yù)處理語句。如果預(yù)處理語句含有參數(shù)標(biāo)記,必須選擇下面其中一種做法:

  • 必須調(diào)用 PDOStatement::bindParam() 和/或 PDOStatement::bindValue() 以將變量或值(分別)綁定到參數(shù)標(biāo)記。如果有的話,通過關(guān)聯(lián)參數(shù)標(biāo)記綁定的變量來傳遞輸入值和取得輸出值
  • 或必須傳遞只作為輸入?yún)?shù)值的數(shù)組

參數(shù) 

params

一個(gè)元素個(gè)數(shù)和將被執(zhí)行的 SQL 語句中綁定的參數(shù)一樣多的數(shù)組。所有的值作為 PDO::PARAM_STR 對(duì)待。

多個(gè)值不能綁定到一個(gè)參數(shù);比如,不允許綁定兩個(gè)值到 IN()子句中一個(gè)單獨(dú)的命名參數(shù)。

綁定的值不能比指定的多;如果在 params 中存在比 PDO::prepare() 預(yù)處理的SQL 指定的多的鍵名,則此語句將會(huì)失敗并發(fā)出一個(gè)錯(cuò)誤。

返回值 

成功時(shí)返回 true, 或者在失敗時(shí)返回 false。

錯(cuò)誤/異常 

如果屬性 PDO::ATTR_ERRMODE 設(shè)置為 PDO::ERRMODE_WARNING,則發(fā)出級(jí)別為 E_WARNING 的錯(cuò)誤。

如果屬性 PDO::ATTR_ERRMODE 設(shè)置為 PDO::ERRMODE_EXCEPTION,則拋出 PDOException。

示例 

示例 #1 執(zhí)行綁定變量和值的預(yù)處理語句

<?php
/* 通過綁定變量和值執(zhí)行預(yù)處理語句 */
$calories = 150;
$colour = 'gre';
$sth = $dbh->prepare('SELECT name, colour, calories
    FROM fruit
    WHERE calories < :calories AND colour LIKE :colour');
$sth->bindParam('calories', $calories, PDO::PARAM_INT);
/* 名稱也可以以冒號(hào)“:”為前綴(可選)*/
$sth->bindValue(':colour', "%$colour%");
$sth->execute();
?>

示例 #2 使用命名值數(shù)組執(zhí)行預(yù)處理語句

<?php
/* 通過傳遞一個(gè)含有插入值的數(shù)組執(zhí)行一條預(yù)處理語句 */
$calories = 150;
$colour = 'red';
$sth = $dbh->prepare('SELECT name, colour, calories
    FROM fruit
    WHERE calories < :calories AND colour = :colour');
$sth->execute(array('calories' => $calories, 'colour' => $colour));
/* 數(shù)組鍵也可以以冒號(hào)“:”為前綴(可選)*/
$sth->execute(array(':calories' => $calories, ':colour' => $colour));
?>

示例 #3 使用位置值數(shù)組執(zhí)行預(yù)處理語句

<?php
/* 通過傳遞一個(gè)插入值的數(shù)組執(zhí)行一條預(yù)處理語句 */
$calories = 150;
$colour = 'red';
$sth = $dbh->prepare('SELECT name, colour, calories
    FROM fruit
    WHERE calories < ? AND colour = ?');
$sth->execute(array($calories, $colour));
?>

示例 #4 使用綁定到位置占位符的變量執(zhí)行預(yù)處理語句

<?php
/* 通過綁定 PHP 變量執(zhí)行一條預(yù)處理語句 */
$calories = 150;
$colour = 'red';
$sth = $dbh->prepare('SELECT name, colour, calories
    FROM fruit
    WHERE calories < ? AND colour = ?');
$sth->bindParam(1, $calories, PDO::PARAM_INT);
$sth->bindParam(2, $colour, PDO::PARAM_STR, 12);
$sth->execute();
?>

示例 #5 使用數(shù)組執(zhí)行一條含有 IN 子句的預(yù)處理語句

<?php
/*  使用一個(gè)數(shù)組的值執(zhí)行一條含有 IN 子句的預(yù)處理語句 */
$params = array(1, 21, 63, 171);
/*  創(chuàng)建一個(gè)填充了和params相同數(shù)量占位符的字符串 */
$place_holders = implode(',', array_fill(0, count($params), '?'));

/*
    對(duì)于 $params 數(shù)組中的每個(gè)值,要預(yù)處理的語句包含足夠的未命名占位符 。
    語句被執(zhí)行時(shí), $params 數(shù)組中的值被綁定到預(yù)處理語句中的占位符。
    這和使用 PDOStatement::bindParam() 不一樣,因?yàn)樗枰粋€(gè)引用變量。
    PDOStatement::execute() 僅作為通過值綁定的替代。
*/
$sth = $dbh->prepare("SELECT id, name FROM contacts WHERE id IN ($place_holders)");
$sth->execute($params);
?>

注釋 

注意:有些驅(qū)動(dòng)在執(zhí)行下一條語句前需要 關(guān)閉游標(biāo) 。

參見 

  • PDO::prepare() - 預(yù)處理要執(zhí)行的語句,并返回語句對(duì)象
  • PDOStatement::bindParam() - 綁定一個(gè)參數(shù)到指定的變量名
  • PDOStatement::fetch() - 從結(jié)果集中獲取下一行
  • PDOStatement::fetchAll() - 從結(jié)果集中獲取剩余的行
  • PDOStatement::fetchColumn() - 從結(jié)果集中的下一行返回單獨(dú)的一列


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)