PHP MySQLi INSERT не работает, ошибок нет - PullRequest
5 голосов
/ 25 июля 2011

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

$sql = "INSERT INTO 'nlcc_ver1'.'tUsers' ('userID', 'userName', 'userPassword', 'userHash',
'user_first_name', 'user_last_name', 'user_corps', 'is_admin', 'is_trg', 'is_sup', 'is_co')
VALUES (NULL, '" . $userName . "', '" . $hash . "', '" . $salt . "', '" . $f_name . "', '" .
$l_name . "', '" . $corps . "', '" . $admin . "', '" . $trg . "', '" . $sup . "', '" . $co . "')";
$hostname_Database = "localhost";
$database_Database = "nlcc_ver1";
$username_Database = "root";
$password_Database = "";
$mysqli = new mysqli($hostname_Database, $username_Database, $password_Database, $database_Database); 
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
$result = $mysqli_query($mysqli, $sql);
echo "Query run. Inserted UserID " . mysqli_insert_id($mysqli) . "<br />";

Вставлены разрывы строк, чтобы избежать боковой прокрутки ... На веб-странице написано, что mysqli_insert_id ($ mysqli) равен 0, и ничего не добавлено в таблицу в моей базе данных. Я не вижу ошибки подключения к базе данных, и MySQL работает на моем сервере, а phpinfo () показывает загруженное расширение MySQL и MySQLI. Это всего лишь машина для разработки, так что не беспокойтесь о безопасности (то есть без пароля). Я попытался найти проблему, но не нашел слишком много. Я не знаю об объектно-ориентированном программировании PHP с ->, я привык использовать _. Этот метод все еще поддерживается?

Ответы [ 4 ]

13 голосов
/ 25 июля 2011

Вы смешали процедурные и объектно-ориентированные стили MySQLi.Это привело к тому, что вы пытались использовать функции типа mysqli_query($mysqli) вместо функций-членов, таких как $mysqli->query().Ваш $mysqli является объектом , а не дескриптором ресурса.

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

$sql = "INSERT INTO `nlcc_ver1`.`tUsers`
       (`userID`, `userName`, `userPassword`, `userHash`,
        `user_first_name`, `user_last_name`, `user_corps`,
        `is_admin`, `is_trg`, `is_sup`, `is_co`)
       VALUES (NULL, '" . $userName . "', '" . $hash . "', '" . $salt . "', '" .
               $f_name . "', '" . $l_name . "', '" . $corps . "', '" . $admin .
               "', '" . $trg . "', '" . $sup . "', '" . $co . "')";

$hostname_Database = "localhost";
$database_Database = "nlcc_ver1";
$username_Database = "root";
$password_Database = "";

$mysqli = new mysqli($hostname_Database, $username_Database, $password_Database, $database_Database); 
if (mysqli_connect_errno()) {
   printf("Connect failed: %s\n", mysqli_connect_error());
   exit();
}

$result = $mysqli->query($sql);
if (!$result) {
   printf("%s\n", $mysqli->error);
   exit();
}

echo "Query run. Inserted UserID " . $mysqli->insert_id . "<br />";

Я настоятельно рекомендую использовать руководство в качестве справочного материала.Понятно, как использовать эти функции, когда вы используете процедурный или объектно-ориентированный стиль MySQLi.

4 голосов
/ 25 июля 2011
$mysqli_query($mysqli, $sql);

должно быть

mysqli_query($mysqli, $sql);

OR

$mysqli->query($sql);

И позже

$mysqli->insert_id();
2 голосов
/ 25 июля 2011

Посмотрите на это:

'nlcc_ver1'.'tUsers'

Вы должны использовать обратные кавычки здесь как символ кавычки:

`nlcc_ver1`.`tUsers`

Но однако (при условии, что $ in $ mysqli_query - просто опечатка): Вы не получите ошибки для запроса, если только вы не используете mysqli_error () сразу после выполнения запроса.

0 голосов
/ 24 июня 2014

SET AutoCommit = 1 перед вставкой

$mysqli->query('SET AUTOCOMMIT = 1');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...