php - HY :093 Invalid parameter number: parameter was not defined

标签 php html mysql sql

我不明白为什么会出现这个错误

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 } ?>

Should Only 添加了用户并显示“'Nom' successfully added”并且 Nom 应该和其他字段应该已经添加。

最佳答案

为什么查询构建如此复杂?可读性和可维护性通常比花哨的更好。

$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();

我知道代码更长,但恕我直言,它比您拥有的代码更容易阅读和维护。

关于php - HY :093 Invalid parameter number: parameter was not defined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56301390/

相关文章:

带有密码保护 url 的 php simplexml_load_file()

html - CSS:元素的大小在 Chrome 中以一种非常奇怪的方式变化

html - 我似乎无法将导航栏居中

mysql - 对闭包表分层数据结构中的子树进行排序

mysql - 选择随机行并在同一个查询中更新它们?

php - 当一切看起来正常时没有选择任何行?

PHP在类中使用全局空间的变量

PHP MySQL 从 2 个表中获取数据

javascript - 谷歌可视化表allowHtml选项在谷歌网站上不起作用

PHP+Mysql 在一行中显示多行的值