2016-02-03 4 views
0

Я работал над веб-сайтом, я просто переместил его базу данных с сервера, на котором запущена CentOS 6, на сервер, на котором работает CentOS 7, и теперь мои запросы не работают, если не присутствуют все столбцы в запросе.Mysqli INSERT не работает, если не присутствуют все столбцы

enter image description here

$sql = 'INSERT INTO users(name, user, huser, hpass, mail, salt) VALUES (?, ?, ?, ?, ?, ?)'; 

/* Prepare statement */ 
$stmt = $conn->prepare($sql); 
if($stmt === false) { 
    trigger_error('Wrong SQL: ' . $sql . ' Error: ' . $conn->errno . ' ' . $conn->error, E_USER_ERROR); 
} 


/* Bind parameters. Types: s = string, i = integer, d = double, b = blob */ 
$stmt->bind_param('ssssss', $name, $user, $huser, $hpass, $email, $salt); 

/* Execute statement */ 
$stmt->execute(); 
mysqli_close($conn); 
echo "Register succeeded! Please wait..."; 

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

Это настройка, которую мне нужно изменить? Я хочу, чтобы мои запросы были минимальными, пустые столбцы будут использоваться позже. Это плохая практика? Тот факт, что смена серверов сломалась, заставляет меня думать, что это либо разница в версиях mysqli, либо конфигурация mysqld.

+0

Вы действительно не должны использовать свои собственные соли для хэшей паролей, и вам действительно нужно использовать встроенные функции PHP (http://jayblanchard.net/proper_password_hashing_with_PHP.html) для защиты паролей. Если вы используете версию PHP менее 5.5, вы можете использовать 'password_hash()' [пакет совместимости] (https://github.com/ircmaxell/password_compat). –

+1

Вы не выполняете свой запрос. –

+0

Если это ваш код, связанный с этим запросом, то @JayBlanchard верен. – RiggsFolly

ответ

1

Этот сценарий работает нормально

Я считаю, что очень трудно поверить. Вы указали, что ни один из 10 атрибутов не может быть нулевым, только 2 имеют значения по умолчанию (id, access), и ваш скрипт устанавливает только 6 значений в INSERT.

Если вы указали, что значение НЕ ДОЛЖНО БЫТЬ NULL, вы должны либо указать значение по умолчанию, либо установить значение.

Если сценарий работает на старом сервере, он должен иметь другую схему, указанную выше.

+0

Возможно, обе базы данных были созданы с использованием phpmyadmin. Я установлю значения по умолчанию и отчитаюсь – aron9forever

+0

Запрос работал нормально, когда отсутствующие столбцы были установлены по умолчанию равными NULL. Я предполагаю, что у старого сервера была другая настройка phpmyadmin, возможно, изменения в схеме, как вы сказали. – aron9forever

Смежные вопросы