2010-03-30 2 views
1

У меня есть ниже SQL запрос, который будет обновлять значения из формы в базу данныхSql запрос проблема

$sql= 
    "update leads set 
     category='$Category', 
     type='$stype', 
     contactName='$ContactName', 
     email='$Email', 
     phone='$Phone', 
     altphone='$PhoneAlt', mobile='$Mobile', 
     fax='$Fax', 
     address='$Address', 
     city='$City', 
     country='$Country', 
     DateEdited='$today', 
     printed='$Printed', 
     remarks='$Remarks' 
    where id='$id'"; 

    $result=mysql_query($sql) or die(mysql_error()); 
echo '<h1>Successfully Updated!!.</h1>'; 

, когда я представить я не получаю какие-либо ошибки и отображается сообщение об успешном выполнении, но разве база данных обновляется , Когда я повторяю $ sql, все значения устанавливаются правильно. и когда я получаю значение $ i, я получаю значение 1.

может кто-нибудь, пожалуйста, скажите мне, что я делаю неправильно здесь?

+2

Echo $ sql и запустить сгенерированный SQL вручную в отношении вашей базы данных - вы должны обнаружить, что он также не обновляется.Измените запрос за пределами PHP до тех пор, пока он не будет корректно обновлен, а затем внесите изменения в PHP. –

+0

@LiveEn: вы уверены, что '$ id' является идентификатором существующей строки? Вы можете использовать 'mysql_affected_rows' (http://php.net/mysql_affected_rows), чтобы узнать, соответствует ли запрос любым строкам. Кроме того, mysqli (http://php.net/mysqli) и PDO (http://php.net/PDO) предпочтительнее устаревшего драйвера mysql. – outis

+0

да .. id отображается при эхом – LiveEn

ответ

1

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

echo $sql; 
exit; 

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

Интересно, что при использовании параметризованных запросов вы не увидите значения параметров, так как параметры заменяются MySQL, а не PHP, однако вы все равно увидите весь подготовленный запрос.

Кроме того, вы можете увидеть количество затронутых строк из вашего оператора UPDATE с помощью функции mysql_affected_rows(). Вы можете поместить это сразу после выполнения запроса:

echo ("Updated records:", mysql_affected_rows()); 

Пространства часто забываются при конкатенации запросов.

$sql = "SELECT * FROM ducks"; 
$sql .= "WHERE duck = 'goose'"; 

Когда вторя выше запрос, мы видим:

SELECT * FROM ducksWHERE duck <> 'goose' 

Я предполагаю, что пункт в вашем UPDATE заявлении WHERE не Совмещение «id = '$id'».

Кроме того, является ли столбец id действительно строкой? Вы добавили одинарные кавычки вокруг значения. MySQL будет при необходимости переводить строку в целое число, но если это целое число, сохраните работу базы данных и удалите одинарные кавычки.

+0

Спасибо ... В id была небольшая проблема. Теперь это работает fyn. – LiveEn

3

Вы пытались запустить эхо $ sql напрямую с помощью какого-нибудь инструмента БД? Это может обеспечить более информативную ошибку. В качестве альтернативы, если это работает, у вас может возникнуть проблема, когда транзакция не будет совершена. Часто устанавливается соединение для автоматического совершения транзакций, но это может быть не так. Попробуйте добавить фиксацию.

А вы когда-нибудь слышали о атаках SQL injection?

+2

Надеюсь, наступит день, когда эта структура категории = '$ Category' будет запрещена в php ... – Andrey

+0

i knw abt sql-инъекции, но это простое приложение для приложений, поэтому на данный момент нужно беспокоиться о проблемах безопасности. – LiveEn

+0

Эй @ Andrey Как насчет ORDER BY $ Category? :) –

1

пытается повторить $ SQL и запустить его непосредственно в любой консоли базы данных, может быть там нет записи с идентификатором = $ ид

1

SQL Injection может быть ответом. Не намеренная атака (на данный момент), но если у ваших параметров есть какая-то неожиданная информация, например, кавычки или другие зарезервированные символы, вы можете получить странные результаты. Итак, попробуйте запустить этот SQL непосредственно в вашей утилите администрирования базы данных.

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