使用以下命令将几个参数动态绑定到语句:
$dbh = new PDO("mysql:host=localhost;dbname=name", USER, PASSWORD);
$params = array(':date' => '2014-02-01',
':amount' => 40,
':type' => 1
);
$query = "INSERT INTO entry (`date`, amount, type) VALUES (:date, :amount, :type)";
$stmt = $dbh->prepare($query);
foreach ($params as $param => $value) {
$stmt->bindParam($param, $value);
}
$stmt->execute()
代码可以工作,但会将以下内容插入表中: 0000-00-00,1.00,1
这里发生了什么?
答案 0 :(得分:1)
您错过了data type
,
PDOStatement::bindParam
的正确格式应该是这样的
$sth->bindParam(':calories', $calories, PDO::PARAM_INT); //note PDO::PARAM_INT here
EG,
$sql = "INSERT INTO movies(filmName,
filmDescription,
filmImage,
filmPrice,
filmReview) VALUES (
:filmName,
:filmDescription,
:filmImage,
:filmPrice,
:filmReview)";
$stmt = $pdo->prepare($sql);
$stmt->bindParam(':filmName', $_POST['filmName'], PDO::PARAM_STR);
$stmt->bindParam(':filmDescription', $_POST['filmDescription'], PDO::PARAM_STR);
$stmt->bindParam(':filmImage', $_POST['filmImage'], PDO::PARAM_STR);
// use PARAM_STR although a number
$stmt->bindParam(':filmPrice', $_POST['filmPrice'], PDO::PARAM_STR);
$stmt->bindParam(':filmReview', $_POST['filmReview'], PDO::PARAM_STR);
$stmt->execute();
答案 1 :(得分:1)
根据Vili对php.net的评论使用foreach ($params as $param => &$value)
代替foreach ($params as $param => $value)
。
为动态添加的查询参数添加变量类型需要一些额外的步骤。
顺便说一句。您至少在示例代码中没有动态定义$params
数组,因此这也可能有效。将整个foreach
替换为:
$result = $stmt->execute($params);