3 回答

TA貢獻(xiàn)1808條經(jīng)驗(yàn) 獲得超4個(gè)贊
你應(yīng)該像這樣使用它
<?php
$dbhost = 'localhost';
$dbname = 'pdo';
$dbusername = 'root';
$dbpassword = '845625';
$link = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbusername, $dbpassword);
$statement = $link->prepare('INSERT INTO testtable (name, lastname, age)
VALUES (:fname, :sname, :age)');
$statement->execute([
'fname' => 'Bob',
'sname' => 'Desaunois',
'age' => '18',
]);
準(zhǔn)備的語句用于清理輸入,并且您可以在SQL中使用這些語句:foo 而無需任何單引號(hào)來綁定變量,然后在execute()函數(shù)中傳遞在SQL語句中定義的變量的關(guān)聯(lián)數(shù)組。
您也可以使用?代替,:foo然后像這樣傳遞僅輸入值的數(shù)組;
$statement = $link->prepare('INSERT INTO testtable (name, lastname, age)
VALUES (?, ?, ?)');
$statement->execute(['Bob', 'Desaunois', '18']);
兩種方式都有其優(yōu)點(diǎn)和缺點(diǎn)。我個(gè)人更喜歡綁定參數(shù)名稱,因?yàn)樗子陂喿x。

TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超5個(gè)贊
我剛剛將代碼重寫為以下代碼:
$dbhost = "localhost";
$dbname = "pdo";
$dbusername = "root";
$dbpassword = "845625";
$link = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbusername, $dbpassword);
$link->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$statement = $link->prepare("INSERT INTO testtable(name, lastname, age)
VALUES(?,?,?)");
$statement->execute(array("Bob","Desaunois",18));
它現(xiàn)在似乎可以正常工作。但。如果我故意造成錯(cuò)誤發(fā)生,則表示沒有錯(cuò)誤。該代碼有效,但仍然有效;如果我遇到更多錯(cuò)誤,我將不知道為什么。

TA貢獻(xiàn)1995條經(jīng)驗(yàn) 獲得超2個(gè)贊
請(qǐng)?jiān)诖a中也添加try catch,以確保沒有例外。
try {
$hostname = "servername";
$dbname = "dbname";
$username = "username";
$pw = "password";
$pdo = new PDO ("mssql:host=$hostname;dbname=$dbname","$username","$pw");
} catch (PDOException $e) {
echo "Failed to get DB handle: " . $e->getMessage() . "\n";
exit;
}
添加回答
舉報(bào)