我不明白为什么会收到此错误
if (isset($_POST['submit'])) {
require "../config.php";
require "../common.php";
try {
$connection = new PDO($dsn, $username, $password, $options);
$new_user = array(
"Nom" => $_POST['Nom'],
"EmailID" => $_POST['EmailID'],
"localité" => $_POST['localité']
);
$sql = sprintf(
"INSERT INTO %s (%s) values (%s)",
"memfis",
implode(", ", array_keys($new_user)),
":" . implode(", :", array_keys($new_user))
);
$statement = $connection->prepare($sql);
$statement->execute($new_user);
} catch(PDOException $error) {
echo $sql . "<br>" . $error->getMessage();
}
}
?>
<?php require "templates/header.php"; ?>
<?php if (isset($_POST['submit']) && $statement) { ?>
<blockquote><?php echo $_POST['name']; ?> successfully added.</blockquote>
<?php } ?>
应仅已添加用户并显示“已成功添加'Nom'”,并且应添加Nom和其他字段。
答案 0 :(得分:0)
为什么查询构建如此复杂?可读性和可维护性通常比幻想更好。
$sql = sprintf(
"INSERT INTO %s (%s) values (%s)",
"memfis",
implode(", ", array_keys($new_user)),
":" . implode(", :", array_keys($new_user))
);
也许尝试将其更改为:
$table = "memfis";
$columnNames = implode(", ", array_keys($new_user));
$columnPlaceholders = ":" . implode(", :", array_keys($new_user));
$sql = "INSERT INTO $table ($columnNames) VALUES ($columnPlaceholders)";
$stmt = $pdo->prepare($sql);
然后因为您的查询将使用:Nom
之类的东西作为占位符,因此您需要使用bindParam()
。
foreach (array_keys($new_user) as $key) {
$placeholder = ":" . $key;
$stmt->bindParam($placeholder, $new_user[$key]);
}
$stmt->execute();
我知道代码更长,但是比您现有的代码更易于阅读和维护恕我直言。