2016-04-03 1 views
-3

У меня есть страница, которая изменяет большое количество переменных в моей базе данных MySQL, и до сих пор все они отлично работали, но теперь все запросы внутри одиночные логические ворота перестали работать без видимых причин.PHP/MySQL запрос перестает работать без видимых причин

Я подтвердил следующее:
- Переменная размещена и используется в «если» заявление ворот как было задумано
- Логика ворот срабатывает по назначению (я могу повторить материал и т.д. внутри него).
- Установлено соединение с базой данных, я успешно выполняю запросы различных типов до и после этого логического элемента с одной и той же переменной соединения.
- Пользователь подключения имеет ВСЕ ПРИВЕДЕНЫ, вышеупомянутые запросы, связанные с этим логическим затвором, успешно используют схожие функции.

Вот логика ворот:

if (!empty($_POST["addqual"])){ 
    $coladqual = $_POST["addqual"]; 
    $sqlf = "ALTER TABLE users ADD UNIQUE ('$coladqual') INT(2) NOT NULL"; 
    $conn->query($sqlf); 
    $sqlc = "INSERT INTO competencebonus (competence,bonus) 
    VALUES ($coladqual,0)"; 
    $conn->query($sqlc); 
} 

Я пытался несколько изменений, но они, кажется, не выполнять, независимо от того, что я делаю. У меня есть как минимум 20 других запросов в других логических воротах до и после этих двух, и между ними, по-видимому, практически нет разницы, кроме этих двух, которые просто не работают вообще.

EDIT - Вот ошибка (спасибо всем, кто предоставил мне синтаксисом отчет об ошибке)

У Вас есть ошибка в вашем SQL синтаксиса; проверьте руководство, соответствующее версии сервера MySQL, для правильного синтаксиса для использования рядом с '' TestAA '') INT (2) NOT NULL UNIQUE 'в строке 1

Что меня поразило, так это то, что только закрывающая скобка вокруг ввода сообщения (TestAA). Предполагается, что оба они или нет?

Я попытался изменить синтаксис и получил следующее сообщение об ошибке:

Дублировать запись '0' для ключа 'TestAB'

с синтаксисом был:

$sqlf = "ALTER TABLE users ADD `$coladqual` INT(2) NOT NULL UNIQUE"; 

FINAL EDIT:

Сделал работу. Удалил оператор «NOT NULL», как рекомендовал Джефф Пакет II. Каким-то образом это в сочетании с удалением скобок и использованием обратных шагов вместо апострофа заставило эту вещь работать. Спасибо за те из вас, кто имел терпение, чтобы помочь мне в этом.

+5

Проверка ошибок всегда должна быть первой. Самообразование - самое сильное. – Rottingham

+3

Вы должны проверить, был ли запрос выполнен успешно. Если что-то не удается, '$ conn' сможет сообщить об этом. (И вы должны указать, используете ли вы PDO или MySQLi.) – Arjan

+0

MySQLi. Как я могу добавить отчет об ошибках к этим запросам? Все примеры, которые я нашел в течение прошлого года, используют совершенно другой формат запроса. – noobequaltotrue

ответ

1

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

Чтобы получить сообщение об ошибке с помощью MySQLi, попробуйте: $result = $conn->query($sqlf) or die($conn->error);

+0

Я пробовал без NOT NULL, без УНИКАЛЬНОГО, и без обоих. Он не работает ни в одном из трех вариантов. Кроме того, гораздо более простой запрос INSERT INTO тоже не работает. – noobequaltotrue

+0

Хорошо, я вернулся. К сожалению, в мой часовой пояс было полночь, и я программировал в течение 10 часов подряд, мой мозг был глубоко обжарен! Спасибо за код ошибки, попробуйте его немедленно. – noobequaltotrue

0

Эта «уникальная» ограничение должно идти в конце вашего запроса

$sqlf = "ALTER TABLE users ADD ('$coladqual') INT(2) NOT NULL UNIQUE"; 

Проверка ошибок зависит от того, что вкус MySQL вы бег

+0

Не работает. Я не уверен, что вы подразумеваете под «ароматом». Я использую настройку WAMP, поэтому я не слишком долго смотрел на программное обеспечение. – noobequaltotrue

+0

Я думал в основном MySQLi против MySQL. Документация по обработке ошибок MySQL находится здесь http://php.net/manual/en/function.mysql-error.php Ваш синтаксис обычно выглядит так, как вы используете MySQLi, как в этой документации http://php.net/manual/en /mysqli.error.php Возможно ли, что вы используете функции MySQLi в MySQL db? – dg4220

+0

Попробуйте этот путь и посмотрите, что вы получите $ add_col = mysql_query ($ sqlf, $ conn); echo mysql_error ($ add_col); – dg4220

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