Данные успешно вставлены, но execute () возвращает false

Я искал здесь ответ на мою проблему. Некоторые, возможно, уже ответили здесь с другими версиями или драйверами. Этот ответ очень помог бы мне продвинуться в моих разработках.

мой PDOStatement::prepare() возвращается правда Но мой PDOStatement::execute(); возвращая ложь.

Принимая во внимание, что строки успешно вставляются в базу данных. Я искал проблему в php.net, а также в документации PDO. Мой поиск пошел в духе.

Мой простой код вставки выглядит следующим образом:

// get current rank into a variable //

$sql = 'SELECT count(email)+1 AS RANK FROM users_main';

$pre = $dbc->prepare($sql);

if($pre){

$pre->execute(array($email)); // <-- working good ...

$res = $pre->fetchObject();

if($res)$rank=(string)$res->RANK;else $rank='';
}

// now inserting new user into the table as per his new rank.

$usercode = substr(md5(gzencode($email)),0,10);
$activationcode = md5(gzencode(substr(md5($email),0,10)));// inserting the actual row into db ...

$sql = "INSERT INTO users_main(email,usercode,activation_code,current_rank) VALUES (?,?,?,?)";
$pre = $dbc->prepare($sql);// debugging ...
echo '<pre>';

try {
$pre->execute(array($email,$usercode,$activationcode,$rank));    // <-- PROBLEM IS HERE . RETURNING FALSE.
}catch(Exception $e){
echo $e->getMessage();  // <--  NO ERROR MESSAGE
}echo '<br><br>';

print_r($dbc->errorInfo());    //   <-- here sqlstate is 0000

echo '</pre>';

/*$emailSubject = 'Welcome Mail!';
$emailLink = '?b='.$activationCode;
if(insertEmailQueue('W',$email,$emailSubject,$emailLink))return true;else return false;
}*/

В дополнение к вышеупомянутой информации, я проверил тип данных каждого столбца, в который я пытаюсь вставить. Все выглядит хорошо.
Ответ на этот вопрос очень мне поможет.

ОБНОВИТЬ

Я отлаживал приведенный выше код и пытался изменить, чтобы получить ошибку. Я изменил код, как показано ниже:

try {

$res = $pre->execute(array($email,$usercode,$activationcode,$rank));    // <-- PROBLEM IS HERE . RETURNING FALSE.

}catch(PDOException $e){
echo $e->getMessage();  // <--  NO ERROR MESSAGE
}echo '<br><br>';

print_r($dbc->errorInfo());    //   <-- here sqlstate is 0000

echo '<br><br>';

print_r($dbc->errorCode());

echo '<br><br>';

print_r($pre->errorCode());

echo '</pre>';

Результат был как ниже:

Array
(
[0] => 00000
[1] =>
[2] =>
)00000

23000    // <-- this is a fatal error as per the documentation.

0

Решение

После двухдневной борьбы за то, чтобы узнать, в чем заключалась ошибка, я, наконец, нашел, пытаясь получить ошибку и другие ссылки в Интернете. Что я изменил, так это

    ....

// now inserting new user into the table as per his new rank.

$usercode = addslashes(substr(md5(gzencode($email)),0,10));
$activationcode = addslashes(md5(gzencode(substr(md5($email),0,10))));....

addslashes() это один из примитивных способов избежать недопустимых символов.

Мне все еще интересно, почему MySQL принял оператор, вставил строки и возвратил false после вставки. Я обновлю ответ, если выясню, почему возникает эта странная проблема.

Спасибо всем за помощь.

-1

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

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

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