Невозможно определить процедурную ошибку MySQL Prepared Statement с помощью переполнения стека

Я новичок в PHP и MySQL. Мой сервер имеет версию 5.6 MySQL. Я использую процедурные заявления (не PDO, не OO). Это страница PHP на сайте, который я разрабатываю, чтобы пользователи могли создать новую учетную запись. Что странно, так это то, что сообщение об ошибке возвращается на самой странице (https://mywebsite.com/create_account.php) а не в журнале ошибок на сервере.

* ЗДЕСЬ СООБЩЕНИЕ ОБ ОШИБКЕ, КОТОРОЕ Я ПОЛУЧУ: *

Ошибка: INSERT INTO пользователей (имя пользователя, пароль, name_first, name_last,
адрес_1, адрес_2, город, штат, почтовый индекс, адрес электронной почты,
номер телефона, имя_карта_карты, номер_карты_основа, номер_карты_ccv,
card_expire_mo, card_expire_yr) ЗНАЧЕНИЯ (?,?,?,?,?,?,?,?,?,?,
?,?,?,?,?,?) У вас есть ошибка в вашем синтаксисе SQL; проверить
руководство, которое соответствует вашей версии сервера MySQL для права
синтаксис для использования рядом с ‘?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)’

* Вот мой код, который генерирует сообщение об ошибке: *

//
// Insert data into database
//

$sql = "INSERT INTO users (username, password, name_first, name_last, address_1, address_2, city, state, zip_code, email_address, phone_number, name_on_card, card_number_main, card_number_ccv, card_expire_mo, card_expire_yr) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
$stmt = mysqli_prepare($link, $sql);
mysqli_stmt_bind_param($stmt, "ssssssssssssssss", $param_username, $param_password, $param_name_first, $param_name_last, $param_address_1, $param_address_2, $param_city, $param_state, $param_zip_code, $param_email_address, $param_phone_number, $param_name_on_card, $param_card_number_main, $param_card_number_ccv, $param_card_expire_mo, $param_card_expire_yr);
$param_username = $username;
$param_password = $password;
$param_name_first = $name_first;
$param_name_last = $name_last;
$param_address_1 = $address_1;
$param_address_2 = $address_2;
$param_city = $city;
$param_state = $state;
$param_zip_code = $zip_code;
$param_email_address = $email_address;
$param_phone_number = $phone_number;
$param_name_on_card = $name_on_card;
$param_card_number_main = $card_number_main;
$param_card_number_ccv = $card_number_ccv;
$param_card_expire_mo = $card_expire_mo;
$param_card_expire_yr = $card_expire_yr;
mysqli_stmt_execute($stmt);

Я прочитал руководство, как подсказывает сообщение об ошибке, но безрезультатно. Любая помощь будет наиболее ценной. Спасибо.

0

Решение

Переместить после объявления переменной bind stmt?

<?php

$sql = "INSERT INTO users (username, password, name_first, name_last, address_1, address_2, city, state, zip_code, email_address, phone_number, name_on_card, card_number_main, card_number_ccv, card_expire_mo, card_expire_yr) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
$stmt = mysqli_prepare($link, $sql);

$param_username = $username;
$param_password = $password;
$param_name_first = $name_first;
$param_name_last = $name_last;
$param_address_1 = $address_1;
$param_address_2 = $address_2;
$param_city = $city;
$param_state = $state;
$param_zip_code = $zip_code;
$param_email_address = $email_address;
$param_phone_number = $phone_number;
$param_name_on_card = $name_on_card;
$param_card_number_main = $card_number_main;
$param_card_number_ccv = $card_number_ccv;
$param_card_expire_mo = $card_expire_mo;
$param_card_expire_yr = $card_expire_yr;


mysqli_stmt_bind_param($stmt, "ssssssssssssssss", $param_username, $param_password, $param_name_first, $param_name_last, $param_address_1, $param_address_2, $param_city, $param_state, $param_zip_code, $param_email_address, $param_phone_number, $param_name_on_card, $param_card_number_main, $param_card_number_ccv, $param_card_expire_mo, $param_card_expire_yr);
mysqli_stmt_execute($stmt);
-2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]