Prepared statement Error您的SQL语法有错误;查看与您的MySQL服务器版本相对应的手册

问题描述 投票:-1回答:1

我浏览有关准备好的陈述的其他文章。我收到以下错误:

You have an error in your SQL syntax; check the manual that corresponds to
your MySQL server version for the right syntax to use near ':first_name, 
:last_name, :birthdate, :nationality, :sex, :phone_number, :email)' at line 1 

我似乎无法弄清楚为什么会收到此错误。我在网上找到的所有内容都无济于事。我希望有人可以指出正确的方向。

$db= new mysqli(DB_SERVER, DB_USER, DB_PASS, DB_NAME);
$sql = "INSERT INTO persons (first_name, last_name, birthdate, nationality, sex, phone_number, email)
 VALUES (:first_name, :last_name, :birthdate, :nationality, :sex, :phone_number, :email)";

$stmt = $db->stmt_init();
if ($stmt->prepare($sql)) { // insert preparement succeed

    // bind varaibles to prepared statement as parameters
    foreach ($params as $field=>$value) {
        $field = ':' . $field;
        if (!$stmt->bind_param($field, $value)) {
            // bind param failled
            echo $db->error;
            // Close statement
            $stmt->close();
            db_disconnect($db);
            exit();
        }
    }
    // bind param succeed, execute the prepared statement
    if ($stmt->execute()) {
        // Close statement
        $stmt->close();
        return true;
    } else {
        // insert execute failled
        echo $db->error;
        // Close statement
        $stmt->close();
        db_disconnect($db);
        exit();
    }
} else {
    // insert preparement failled
    echo $db->error ;
    db_disconnect($db);
    exit();
}


php mysql prepared-statement bindparam
1个回答
0
投票

MySQLI不支持诸如:first_name之类的占位符。如果您希望使用这种连接,请尝试PDO:

<?php
$host = "localhost";
$user = "username";
$pass = "password";
$datb = "myDBPDO";

$dsn = "mysql:host=$host;dbname=$datb";
$options = [
    \PDO::ATTR_ERRMODE            => \PDO::ERRMODE_EXCEPTION,
    \PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC,
    \PDO::ATTR_EMULATE_PREPARES   => false,
];

$conn = new \PDO($dsn, $user, $pass, $options);

if (!$conn) { //Upon failure
    die('Error connecting to database.');
}

// Prepare SQL and bind parameters
$stmt = $conn->prepare("INSERT INTO delivery(fname,lname,address,city,zip,phone,email) VALUES(:fname, :lname, :address, :city, :zip, :phone, :email)");
$params = [
    'fname' => $_POST['fname'],
    'lname' => $_POST['lname'],
    'address' => $_POST['address'],
    'city' => $_POST['city'],
    'zip' => $_POST['zip'],
    'phone' => $_POST['phone'],
    'email' => $_POST['email']
];
$stmt->execute($params);

echo "New records created successfully";
© www.soinside.com 2019 - 2024. All rights reserved.