2016-12-06 3 views
0

Я пытаюсь использовать инструкцию INSERT INTO SQL в php. Он будет вводить все правильно до последнего значения ($bands_bio). Вместо того, чтобы вводить правильную информацию, она оставляет значение пустым. Я просмотрел все и не могу найти никаких синтаксических ошибок.Инструкция INSERT INTO не будет вставлять определенное значение правильно?

$page_title = "Create a new band"; 

require ('includes/database.php'); 
require_once 'includes/bandsHeader.php'; 

$band_name = $conn->real_escape_string(trim(filter_input(INPUT_GET, 'band_name', FILTER_SANITIZE_STRING))); 
$band_photo = $conn->real_escape_string(trim(filter_input(INPUT_GET, 'band_photo', FILTER_SANITIZE_STRING))); 
$genre = $conn->real_escape_string(trim(filter_input(INPUT_GET, 'genre', FILTER_SANITIZE_STRING))); 
$band_bio = $conn->real_escape_string(trim(filter_input(INPUT_GET, 'band_bio', FILTER_SANITIZE_STRING))); 

echo $band_bio; 

if (($band_name === "") OR ($genre === "") OR ($band_photo === "") OR ($band_bio = "")) { 
    $errno = $conn->errno; 
    $errmsg = $conn->error; 
    echo "<div id='contentWrapper'>"; 
    echo "<div class='contentBox'>"; 
    echo "Insertion failed with: ($errno) $errmsg<br/>\n"; 
    echo "</div></div>"; 
    $conn->close(); 
    include 'includes/searchFooter.php'; 
    exit; 
} 

$albums = 0; 

$sql = "INSERT INTO bands VALUES (NULL, '$band_name', '$genre', '$albums', '$band_bio')"; 

$query = @$conn->query($sql); 

if (!$query) { 
    $errno = $conn->errno; 
    $errmsg = $conn->error; 
    echo "<div id='contentWrapper'>"; 
    echo "<div class='contentBox'>"; 
    echo "Insertion failed with: ($errno) $errmsg<br/>\n"; 
    echo "</div></div>"; 
    $conn->close(); 
    include 'includes/footer.php'; 
    exit; 
} 

Как вы можете видеть, я вторил из $band_bio для того, чтобы увидеть, если он получал правильное значение от моей формы, которая использует метод GET, который это так, что это не проблема. У меня нет проблем с вставкой все правильно до последнего значения, которое должно быть последним столбцом с именем band_bio в моей таблице bands в моей базе данных. Он также не выдаст никаких ошибок или чего-либо еще. Это почти похоже на то, что он берет строковые данные из переменной и удаляет весь текст до того, как он вставляет информацию.

Я работаю на этом сайте всего несколько недель и использую инструкцию INSERT INTO точно так же, как и на других страницах, и это работает нормально. Это первое, что меня действительно задело, и я не могу понять. Любая помощь приветствуется.

+0

Что такое ddl (схема) для вашей таблицы 'band'? – eggmatters

+0

Какие яйцо говорит + пример значений, которые вы вставляете, если возможно :) – vuryss

+0

Может быть: '$ bands_bio =" ''); DELETE из диапазонов, где true '"'? – eggmatters

ответ

2

При установке убедитесь, что для поля pk (id) установлено значение auto-increment. Таким образом, вы можете больше контролировать свои запросы. Вы должны быть более успешным:

$sql = "INSERT INTO bands " 
. "(`band_name`,`genre`,`numof_albums`,`band_bio`) " 
. "VALUES ('$band_name', '$genre', '$albums', '$band_bio')"; 

не определяя поле рк, INNODB будет увеличиваться автоматически и вставить его для вас.

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

Не должно быть причин, по которым band_bio будет «оставлен». Вы получите ошибку несоответствия столбца.

+0

Да, у меня есть первичный ключ, который будет автоматически увеличиваться. Весь наш сайт сломался бы, если бы это было не так, поскольку он в значительной степени полагался на первичный ключ и ассоциацию внешних ключей через band_id ... также я случайно случайно включил старую схему случайно. Правильный был отредактирован. – Lefty

+0

Я отредактировал свой ответ. У вас был какой-то успех с запросом сверху? – eggmatters

+0

Я попытался использовать ваш запрос, и он вернул эту ошибку: Ошибка вставки с: (1064) У вас возникла ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии сервера MariaDB, для правильного синтаксиса для использования рядом с «0» в строке 1 – Lefty

0

Полностью нашел ответ сам! Фактически, это была синтаксическая ошибка.

if (($band_name === "") OR ($genre === "") OR ($band_photo === "") OR ($band_bio = "")) 

переменной $band_bio был назначение на пустую строку в заявлении, если так как я случайно использовал оператор присваивания, а не оператор сравнения. Поэтому правильный код должен быть $band_bio === "", а не $band_bio = "".

Клянусь, проблема всегда намного проще, чем вы думаете, что это будет.