【发布时间】:2019-11-07 18:01:09
【问题描述】:
我目前正在将 mySQLi PHP 代码转换为 PDO 以获得更好的安全性,但我在理解如何转换下面的代码并将其实现到我的新 PDO PHP 中时遇到了一些麻烦
下面的代码应该采用最后插入的 ID(PDO 插入的那个)并将列 idnum 设置为等于 NUM(以及最后插入的 id)。
如何将其转换并添加到 PDO 中?
if (mysqli_query($conn, $sql)) {
$last_id = mysqli_insert_id($conn);
$sql = "UPDATE Equipment SET idnum = CONCAT('NUM', '$last_id') WHERE equipment_id = '$last_id'";
mysqli_query($conn, $sql);
echo "New record created successfully. Last inserted ID is: " . last_id;
} else {
echo "Error: " . $sql . "<br>" . mysqli_error($conn);
}
mysqli_close($conn);
我想将代码添加到以下 PDO PHP 脚本中:
$hostdb = 'localhost';
$namedb = 'dbname';
$userdb = 'userdb';
$passdb = 'passdb';
$charset = 'utf8';
if (isset($_POST['name'], $_POST['place'], $_POST['person'] , $_POST['number'] , $_POST['other_name'])) {
// Connect and create the PDO object
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_EMULATE_PREPARES => false,
];
$conn = new PDO("mysql:host=$hostdb;dbname=$namedb;charset=$charset", $userdb, $passdb, $options);
$stmt = $conn->prepare( ' INSERT INTO `Table1` (name, place, person, number, other_name, progress)
VALUES (:name,:place,:person,:number,:other_name, "Done") ' );
$stmt->execute([
'name' => $_POST['name'],
'place' => $_POST['place'],
'person' => $_POST['person'],
'number' => $_POST['number'],
'other_name' => $_POST['other_name'],
]);
// Shows the number of affected rows
echo 'Affected rows : '. $stmt->rowCount();
}
【问题讨论】:
-
如果您正在寻找
mysqli_insert_id($conn)的 PDO 等效项,您需要$conn->lastInsertId()。然后你可以像往常一样执行 UPDATE 查询。 -
好吧,你在这里错过了一个报价
$userdb = 'userdb;,但我认为这只是问题中的一个错字。would like to add the code to the following PDO PHP scriptPDO 完全不一样,一个是insert,另一个是Update,怎么把那个加到insert里面。 -
$last_id = $conn->lastInsertId();然后$conn->prepare("UPDATE Equipment SET idnum = CONCAT('NUM', :last_id_0) WHERE equipment_id = :last_id_1")->execute(['last_id_0' => $last_id, 'last_id_1' => $last_id ])';键/占位符必须是唯一的。但如果它们在一起,我也会使用事务和 try catch 块:-/ -
为什么您认为 PDO 会为您提供更好的安全性?这是准备好的语句,可以为您提供更好的安全性,您可以使用
mysqli_*()