PDO-vorbereitete Anweisung PDOStatement-Objekt

不言
Freigeben: 2023-04-02 09:30:02
Original
2025 Leute haben es durchsucht

In diesem Artikel wird hauptsächlich die Verwendung von PDO-Vorbereitungsanweisungen für PDOStatement-Objekte vorgestellt. In diesem Artikel werden die Methoden von PDOStatement und Beispiele für gängige Methoden vorgestellt.

PDOs Unterstützung für vorbereitete Anweisungen Sie müssen das Klassenobjekt PDOStatement verwenden, dieses Klassenobjekt wird jedoch nicht über das Schlüsselwort NEW instanziiert, sondern direkt nach der Vorbereitung einer vorverarbeiteten SQL-Anweisung im Datenbankserver über die Methode Prepare() im PDO-Objekt zurückgegeben. Wenn das PDOStatement-Klassenobjekt, das durch vorheriges Ausführen der query()-Methode im PDO-Objekt zurückgegeben wurde, nur ein Ergebnismengenobjekt darstellt. Und wenn das PDOStatement-Klassenobjekt, das durch die Ausführung der Prepare()-Methode im PDO-Objekt generiert wird, ein Abfrageobjekt ist, kann es parametrisierte SQL-Befehle definieren und ausführen. Alle Mitgliedsmethoden in der PDOStatement-Klasse lauten wie folgt:

PDOStatement::bindColumn — 绑定一列到一个 PHP 变量
PDOStatement::bindParam — 绑定一个参数到指定的变量名
PDOStatement::bindValue — 把一个值绑定到一个参数
PDOStatement::closeCursor — 关闭游标,使语句能再次被执行。
PDOStatement::columnCount — 返回结果集中的列数
PDOStatement::debugDumpParams — 打印一条 SQL 预处理命令
PDOStatement::errorCode — 获取跟上一次语句句柄操作相关的 SQLSTATE
PDOStatement::errorInfo — 获取跟上一次语句句柄操作相关的扩展错误信息
PDOStatement::execute — 执行一条预处理语句
PDOStatement::fetch — 从结果集中获取下一行
PDOStatement::fetchAll — 返回一个包含结果集中所有行的数组
PDOStatement::fetchColumn — 从结果集中的下一行返回单独的一列。
PDOStatement::fetchObject — 获取下一行并作为一个对象返回。
PDOStatement::getAttribute — 检索一个语句属性
PDOStatement::getColumnMeta — 返回结果集中一列的元数据
PDOStatement::nextRowset — 在一个多行集语句句柄中推进到下一个行集
PDOStatement::rowCount — 返回受上一个 SQL 语句影响的行数
PDOStatement::setAttribute — 设置一个语句属性
PDOStatement::setFetchMode — 为语句设置默认的获取模式。
Nach dem Login kopieren

1. Prepare-Anweisung

Führen Sie wiederholt eine SQL-Abfrage aus und verwenden Sie bei jeder Iteration unterschiedliche Parameter In diesem Fall ist die Verwendung vorbereiteter Anweisungen am effizientesten. Um vorbereitete Anweisungen zu verwenden, müssen Sie zunächst eine „SQL-Anweisung“ auf dem Datenbankserver vorbereiten, diese muss jedoch nicht sofort ausgeführt werden. PDO unterstützt die Verwendung der „Platzhalter“-Syntax, um Variablen an diese vorverarbeitete SQL-Anweisung zu binden. Wenn bei einer vorbereiteten SQL-Anweisung bei jeder Ausführung einige Spaltenwerte geändert werden müssen, müssen „Platzhalter“ anstelle bestimmter Spaltenwerte verwendet werden. Es gibt zwei Syntaxen für die Verwendung von Platzhaltern in PDO: „benannte Parameter“ und „Fragezeichenparameter“. Welche Syntax Sie verwenden, hängt von Ihren persönlichen Vorlieben ab.

INSERT-Anweisung mit benannten Parametern als Platzhalter:

$dbh->prepare(“insert into contactinfo(name,address,phone) values(:name,:address,:phone)”);
Nach dem Login kopieren

Sie müssen eine Zeichenfolge als „benannten Parameter“ anpassen. Jeder benannte Parameter muss mit einem Doppelpunkt (:) und dem Parameter beginnen Der Name muss aussagekräftig sein und vorzugsweise mit dem entsprechenden Feldnamen übereinstimmen.
Anweisung mit Fragezeichen-Parameter (?) als Platzhalter einfügen:

$dbh->prepare(“insert into contactinfo(name,address,phone) values(?,?,?)”);
Nach dem Login kopieren

Der Fragezeichen-Parameter muss der Positionsreihenfolge der Felder entsprechen. Unabhängig davon, welcher Parameter als Abfrage aus Platzhaltern verwendet wird oder in der Anweisung keine Platzhalter verwendet werden, müssen Sie die Methode Prepare () im PDO-Objekt verwenden, um die Abfrage vorzubereiten, die für die iterative Ausführung verwendet wird, und gibt a zurück PDOStatement-Klassenobjekt.

2. Bind-Parameter

Wenn die SQL-Anweisung auf dem Datenbankserver über die Prepare()-Methode im PDO-Objekt vorbereitet wird, benötigen Sie Platzhalter um die Eingabeparameter bei jeder Ausführung zu ersetzen. Über die Methode bindParam() im PDOStatement-Objekt können Sie Parametervariablen an vorbereitete Platzhalter binden (Position oder Name müssen übereinstimmen). Der Prototyp der Methode bindParam() lautet wie folgt:

bool PDOStatement::bindParam ( mixed $parameter , mixed &$variable [, int $data_type = PDO::PARAM_STR [, int $length [, mixed $driver_options ]]] )
Nach dem Login kopieren

Der erste Parameterparameter ist erforderlich. Wenn die Platzhaltersyntax in der vorbereiteten Abfrage Namensparameter verwendet, wird die Namensparameterzeichenfolge als bindParam()-Methode verwendet wird als erster Parameter bereitgestellt. Wenn die Platzhaltersyntax ein Fragezeichenargument verwendet, wird der Indexoffset des Spaltenwertplatzhalters in der vorbereiteten Abfrage als erstes Argument an die Methode übergeben.

Die zweite Parametervariable ist ebenfalls optional und liefert den Wert des durch den ersten Parameter angegebenen Platzhalters. Da der Parameter als Referenz übergeben wird, können nur Variablen als Parameter bereitgestellt werden, keine Werte direkt.

Der dritte Parameter data_type ist optional und legt den Datentyp für den aktuell gebundenen Parameter fest. Können die folgenden Werte sein.

PDO::PARAM_BOOL repräsentiert den booleschen Datentyp.
PDO::PARAM_NULL repräsentiert den NULL-Typ in SQL.
PDO::PARAM_INT repräsentiert den INTEGER-Datentyp in SQL.
PDO::PARAM_STR repräsentiert CHAR, VARCHAR und andere String-Datentypen in SQL.
PDO::PARAM_LOB repräsentiert den Datentyp für große Objekte in SQL.

Der vierte Parameter Länge ist optional und wird verwendet, um die Länge des Datentyps anzugeben.

Der fünfte Parameter „driver_options“ ist optional und stellt über diesen Parameter alle datenbanktreiberspezifischen Optionen bereit.
Beispiel für die Parameterbindung mit benannten Parametern als Platzhalter:

<?php
//...省略PDO连接数据库代码
$query = "insert into contactinfo (name,address,phone) values(:name,:address,:phone)";
$stmt = $dbh->prepare($query);          //调用PDO对象中的prepare()方法
 
$stmt->blinparam(&#39;:name&#39;,$name);        //将变量$name的引用绑定到准备好的查询名字参数":name"中
$stmt->blinparam(&#39;:address&#39;,$address);
$stmt->blinparam(&#39;:phone&#39;,phone);
//...
?>
Nach dem Login kopieren

Beispiel für die Parameterbindung mit Fragezeichen (?) als Platzhalter:

<?php
//...省略PDO连接数据库代码
$query = "insert into contactinfo (name,address,phone) values(?,?,?)";
$stmt = $dbh->prepare($query);          //调用PDO对象中的prepare()方法
 
$stmt->blinparam(1,$name,PDO::PARAM_STR);        //将变量$name的引用绑定到准备好的查询名字参数":name"中
$stmt->blinparam(2,$address,PDO::PARAM_STR);
$stmt->blinparam(3,phone,PDO::PARAM_STR,20);
//...
?>
Nach dem Login kopieren

3 Führen Sie die vorbereitete Anweisung aus

Nachdem die vorbereitete Anweisung abgeschlossen und die entsprechenden Parameter gebunden sind, können Sie die vorbereitete Anweisung im Datenbankcache wiederholt ausführen, indem Sie die Methode „execute()“ im PDOStatement-Klassenobjekt aufrufen. Im folgenden Beispiel wird die Vorverarbeitung verwendet, um kontinuierlich dieselbe INSERT-Anweisung in der zuvor bereitgestellten Kontaktinfo-Tabelle auszuführen, und zwei Datensätze werden durch Ändern unterschiedlicher Parameter hinzugefügt. Wie unten gezeigt:

<?php 
try {
     $dbh = new PDO(&#39;mysql:dbname=testdb;host=localhost&#39;, $username, $passwd);
}catch (PDOException $e){
    echo &#39;数据库连接失败:&#39;.$e->getMessage();
    exit;
}
 
$query = "insert into contactinfo (name,address,phone) values(?,?,?)";
$stmt = $dbh->prepare($query);
 
$stmt->blinparam(1,$name);      
$stmt->blinparam(2,$address);
$stmt->blinparam(3,phone);
 
$name = "赵某某";
$address = "海淀区中关村";
$phone = "15801688348";
 
$stmt->execute();           //执行参数被绑定后的准备语句
?>
Nach dem Login kopieren

Wenn Sie nur Eingabeparameter übergeben und viele solcher Parameter übergeben werden müssen, ist die unten gezeigte Verknüpfungssyntax sehr hilfreich. Dies ist die zweite Möglichkeit, Eingabeparameter für eine vorverarbeitete Abfrage während der Ausführung zu ersetzen, indem in der Methode „execute()“ ein optionaler Parameter bereitgestellt wird, bei dem es sich um ein Array benannter Parameterplatzhalter in der vorbereiteten Abfrage handelt. Mit dieser Syntax können Sie den Aufruf von $stmt->bindParam() eliminieren. Ändern Sie das obige Beispiel wie folgt:

<?php 
//...省略PDO连接数据库代码
$query = "insert into contactinfo (name,address,phone) values(?,?,?)";
$stmt = $dbh->prepare($query); 
 
//传递一个数组为预处理查询中的命名参数绑定值,并执行一次。
$stmt->execute(array("赵某某","海淀区","15801688348"));
?>
Nach dem Login kopieren

Wenn außerdem eine INSERT-Anweisung ausgeführt wird und in der Datentabelle ein automatisch wachsendes ID-Feld vorhanden ist, können Sie zum Abrufen die lastinsertId()-Methode im PDO-Objekt verwenden die letzte Einfügung in die Datentabelle. Wenn Sie überprüfen müssen, ob andere DML-Anweisungen erfolgreich ausgeführt werden, können Sie die Anzahl der Zeilen, die sich auf den Datensatz auswirken, über die Methode rowCount() im PDOStatement-Klassenobjekt ermitteln.

Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass er für das Studium aller hilfreich ist. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website.

Verwandte Empfehlungen:

Einführung in die Importmethode der benutzerdefinierten Tag-Bibliothek von thinkPHP2.1

Verwenden Sie Pthreads, um echte Ergebnisse zu erzielen PHP-Multithreading-Methode

Das obige ist der detaillierte Inhalt vonPDO-vorbereitete Anweisung PDOStatement-Objekt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!