#php #arrays #execute
#php #массивы #выполнить
Вопрос:
Я пытаюсь внедрить процесс проверки электронной почты на свой веб-сайт, но я получил ошибку
Неустранимая ошибка: неперехваченная ошибка: Вызов функции-члена execute() в bool в: 56 Трассировка стека: #0 {main}, введенный в строку 56
Вот мой код:
$user_activation_code = md5(rand());
// Nuevo Usuario
$hashed = password_hash($password,PASSWORD_DEFAULT);
$insert_query = 'INSERT INTO clientes (full_name,email,user_activation_code,user_email_status,password,permissions,street,numero,interior,city,state,zip_code,country) VALUES ("$name","$email","$user_activation_code",:user_email_status,"$hashed",cliente,"$street","$numero","$interior","$city","$state","$zip_code",Mexico)';
$statement = $db->prepare($insert_query);
$statement -> execute(
array(
'full_name' => $_POST['name'],
'email' => $_POST['email'],
'password' => $hashed,
'user_activation_code' => $user_activation_code,
':user_email_status' => 'no verificado'
)
);
$result = $statement->fetchAll();
Комментарии:
1. Ваш запрос не удался, используйте отчет об ошибках, чтобы узнать причину. Массив допустим с PDO, так что это не проблема. Все значения должны быть привязаны, а не только некоторые из них. Я бы предположил,
Mexico
что это ваша текущая проблема, хотя2. Если вы собираетесь подготовить свой оператор, вы могли бы также связать все параметры. Это избавит вас от головной боли в будущем.
3. Глядя на это снова, я думаю, что вы ошибаетесь. У вас нет
password
заполнителя."$hashed"
должно быть:password
в вашем запросе (вvalues()
части).4. Вы не создаете записи массива для имен ваших столбцов, вы создаете их для имен ваших привязок. Т.е. вы пытаетесь привязать
full_name
,password
иuser_activation_code
, но у вас нет:full_name
,:password
,:user_activation_code
, или в вашем запросе.5. Итак … ваш
prepare
сбой.
Ответ №1:
Вам нужно правильно привязать свой массив к запросу.
PDO для использования ассоциативного массива вам необходимо иметь значения как в строке запроса, так и те же значения в вашем ключе.
$insert_query = 'INSERT INTO clientes (full_name,email,user_activation_code,user_email_status,password,permissions,street,numero,interior,city,state,zip_code,country) VALUES (:full_name,:email,:user_activation_code,:user_email_status,:password,"cliente","$street","$numero","$interior","$city","$state","$zip_code","Mexico")';
array(
':full_name' => $_POST['name'],
':email' => $_POST['email'],
':password' => $hashed,
':user_activation_code' => $user_activation_code,
':user_email_status' => 'no verificado'
)
Пожалуйста, также привяжите другие ваши значения, такие как: $city, $ state и т.д.
Комментарии:
1. Вы помещаете заполнители bind в список столбцов, они должны быть в списке значений.
2. @AlexHowansky хороший улов
3.
Mexico
иcliente
вероятно, все равно вызовет проблемы, и действительно, все значения должны быть привязаны. Любой может содержать кавычку, и это снова приведет к разрыву.