我目前正在学习PHP概念,而无法弄清楚如何正确绑定查询。根据PDO手册,查询只有在类型为string,int,float等时才会绑定。我的第一个问题是:“我需要绑定日期吗?”如果是,使用哪些参数。否则,我需要将一个关系的某些属性绑定到insert以及如何处理剩余的那些不属于上述类型的? 这是我的代码:
public function addCustomer($fname, $lname, $email, $dob, $hashedPwd, $hash)
{
$customer = new Customer($fname, $lname, $email, $dob, $hashedPwd);
$sql = $this->pdo->prepare("INSERT INTO customer(fname, lname, email, date_of_birth, password, hash, active)"
. " VALUES(:fname, :lname, :date_of_birth, :email, :password, :hash, :active)");
$sql->bindValue(':fname', $customer->getFname(), PDO::PARAM_STR);
$sql->bindValue(':lname', $customer->getLname(), PDO::PARAM_STR);
$sql->bindValue(':email', $customer->getEmail(), PDO::PARAM_STR);
$sql->bindValue(':password', $customer->getPassword(), PDO::PARAM_STR);
$sql->bindValue(':hash', $hash, PDO::PARAM_STR);
$sql->bindValue(':active', 0, PDO::PARAM_INT);
try {
$sql->execute(['date_of_birth' => $dob]);
echo "SUCCESS" . "<br>";
}catch (PDOException $e) {
$e->getMessage();
}
}
答案 0 :(得分:0)
我通过传递一个数组并使用问号作为我的占位符来实现它
我还建议编写一组泛型函数或数据库处理程序类,您只需传递一个查询和数组(或者可能是带有数据库连接信息的第二个数组),然后返回一个元素为true或false的数组。 0和元素1的错误消息或元素1的数据(在选择的情况下)。
这是我的一个片段,经过修改以取消所有其他处理,但它显示了我如何进行参数化和准备查询。
<?php
$query="insert into tablename(first_name,last_name) values(?,?)";
$array=array("John","Doe");
$dbconn = new PDO('mysql:host=' . $hostname . ';port=' . $dbPort . ';dbname=' . $dbName . ';charset=utf8', $username, $password, array(PDO::MYSQL_ATTR_FOUND_ROWS => true));
$dbconn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$result = $dbconn->prepare($query);
$result->execute($arr);
if (!$result) {
$retVal[] = false;
$retVal[] = "some sort of error on execute";
$retVal[] = $dbconn->errorInfo();
return;
}
$retVal[] = true;
$retVal[] = $dbconn->lastInsertId();
return;
?>