PHP mysqli Insert не работает, но не выдает никаких ошибок - PullRequest
2 голосов
/ 20 апреля 2010

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

Моя таблица пользователей имеет намного больше полей, чем эти 4, но все они должны быть по умолчанию.

$query = 'INSERT INTO users (username, password, level, name) VALUES (?, ?, ?, ?)';
if($stmt = $db -> prepare($query))
{
    $stmt -> bind_param('ssis', $username, $password, $newlevel, $realname);
    $stmt -> execute();
    $stmt -> close();
    echo 'Any Errors: '.$db->error.PHP_EOL;
}

Ошибок не дано, но когда я смотрю на таблицу в phpmyadmin, новая строка не добавляется. Я точно знаю, что типы правильные (строки и целые числа). Здесь что-то действительно не так или это как-то связано с тем, что я игнорирую другие столбцы. У меня около 8 столбцов в пользовательской таблице.

Ответы [ 5 ]

6 голосов
/ 09 августа 2012

Если вы отключили автоматическую фиксацию, вам придется явно вызывать метод фиксации после выполнения запроса.

$stmt->execute();
$db->commit();
$stmt->close();
2 голосов
/ 20 апреля 2010

Вы должны проверять наличие ошибок на каждом этапе процесса: при подключении, при подготовке оператора, при привязке, при выполнении и при закрытии.В вашем коде, при условии, что дескриптор $db был создан правильно, проверка ошибок происходит после вызова ->close(), что должно завершиться успешно, поэтому в этот момент не будет никаких ошибок.

Что-то подобноелинии покажут, где все взорвалось:

$query = 'INSERT INTO users (username, password, level, name) VALUES (?, ?, ?, ?)';
$stmt = $db->prepare($query);
echo 'prepare error: ', $db->error, PHP_EOL;
$stmt->execute();
echo 'execute error: ', $db->error
etc....
1 голос
/ 21 апреля 2010
$query = 'INSERT INTO users (username, password, level, name) VALUES (?, ?, ?, ?)'; 
if($stmt = $db -> prepare($query)){

     $stmt -> bind_param('ssis', $username, $password, $newlevel, $realname);

    $username='testname';$password='testpwd';$level=5;$realname='testrealname';

         $stmt -> execute(); echo "inserted SuccessFully";  $stmt -> close(); } 
else { printf("Prepared Statement Error: %s\n", $mysqli->error);} 

попробуйте этот код. Если запрос выполнен успешно, отображается «Вставлено успешно», в противном случае отображается ошибка.

1 голос
/ 20 апреля 2010

Вы инициализируете значения $ username, $ password, $ newlevel, $ realname перед $ stmt -> execute (); заявление. В противном случае вы должны инициализировать и попробовать

1 голос
/ 20 апреля 2010

Проверьте, печатается ли строка «Любые ошибки». Если нет, то утверждение:

if ($stmt = $db->prepare($query))

возвращает ложь. Вы должны переместиться echo 'Any Errors: '.$db->error.PHP_EOL; за пределы условного блока.

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