Как отладить то, что подготовленный оператор PHP PDO не вставляет данные - PullRequest
0 голосов
/ 03 июня 2011

У меня есть

$salt = md5(mt_rand());
$hashed = hash_hmac('SHA256', $password, $salt);
$stmt = self::$_dbh->prepare('INSERT INTO users (username, password, salt, display, email) VALUES (:username, :password, :salt, :display, :email)');
$stmt->bindParam('username', $username);
$stmt->bindParam('password', $hashed);
$stmt->bindParam('salt', $salt);
$stmt->bindParam('display', $display);
$stmt->bindParam('email', $email);
$stmt->execute();
$firephp->log('Insert OK ');
if ($stmt->rowCount() > 0) {
    return array(
            'status' => 'OK',
            'message' => 'Registration Successful'
    );
} 
$firephp->log('Unknown ... Row count: ' . $stmt->rowCount());
return array(
        'status' => 'failed',
        'message' => 'Something went wrong with the registration ... Please try again ...'
);

Я всегда получаю "Что-то пошло не так с регистрацией ... Пожалуйста, попробуйте еще раз ...".Похоже, rowCount равно 0. Достаточно верно, он не вставляется в базу данных.Почему это так?

Ответы [ 3 ]

3 голосов
/ 03 июня 2011

Попробуйте:

 $firephp->log(
       $stmt->debugDumpParams()
       . "\n"
       . var_export($stmt->errorInfo());
0 голосов
/ 28 ноября 2012

Подобные проблемы могут возникать, когда кто-то включает / выключает автоинкремент БД в основном поле id.Просмотрите базу данных и убедитесь, что она настроена правильно.

0 голосов
/ 03 июня 2011

Попробуйте поместить двоеточия в заполнители bindParam, как вместо

$stmt->bindParam('username', $username);

До

$stmt->bindParam(':username', $username);

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...