MySQL UPDATE Ошибка синтаксиса запроса? - PullRequest
1 голос
/ 29 января 2012

Я относительно новичок в MySQL и PHP, и я уже очень давно пытаюсь ОБНОВИТЬ таблицу, я искал в Google и SO и до сих пор не могу понять это.

Вот php:

$info = array('about_me' => NULL, 'profile_pic' => NULL, 'political_party' => NULL,         'econ_views' => NULL, 'religious_views' => NULL, 
'abortion_view' =>NULL,'gay_marraige' => NULL, 'other' => NULL);

foreach ($_POST as $key => $value) {
    $info[$key] = mysql_escape_string($value);
}

$about_me = $info['about_me'];
$profile_pic = $info['profile_pic'];
$econ_views = $info['econ_views'];
$religious_views = $info['religious_views'];
$abortion_view = $info['abortion_view'];
$gay_marraige = $info['gay_marraige'];
$other = $info['other'];
$political_party = $info['political_party'];

//Connect to database
require 'db.php';

$query = "UPDATE `users` SET `about_me`=$about_me, `profile_pic`=$profile_pic,   `econ_views`=$econ_views,
       `religious_views`=$religious_views,`abortion_view`=$abortion_view,`gay_marriage`=$gay_marraige, 
    `other`=$other, `political_party`=$political_party WHERE `username`=emoore24";

echo "$query"."<br /><br />";
$result = mysql_query($query) or die(mysql_error());

echo "success"

Он запускается в форме со многими текстовыми областями и одним элементом select.Я запустил все с простыми строками в качестве данных и получил это:

ОБНОВЛЕНИЕ users УСТАН about_me = проверка о, profile_pic =, econ_views = проверка экономики, religious_views = проверкаrel, abortion_view = тестовый аборт, gay_marriage = тестовый гей marraige, other = тестовый другой, political_party = демократ WHERE username = emoore24

В синтаксисе SQL возникла ошибка;проверьте руководство, соответствующее вашей версии сервера MySQL> для правильного синтаксиса для использования рядом с 'econ_views = test econ,> religious_views = test rel, abortion_view = test abor' в строке 1

Я предполагаю, что это что-то маленькое, но я не вижу этого.Может ли кто-нибудь помочь?

Ответы [ 4 ]

4 голосов
/ 29 января 2012

Вы не ставили кавычки вокруг своих строковых литералов.

UPDATE `users` SET 
  `about_me`=about_me, 
  `profile_pic`=, 
  `econ_views`=test econ,  
  `religious_views`=test rel,
  `abortion_view`=test abortion,
  `gay_marriage`=test gay marraige, 
  `other`=test other, 
  `political_party`=democrat 
WHERE `username`=emoore24

Должно быть:

UPDATE `users` SET 
  `about_me`='about_me', 
  `profile_pic`=NULL, 
  `econ_views`='test econ',  
  `religious_views`='test rel',
  `abortion_view`='test abortion',
  `gay_marriage`='test gay marraige', 
  `other`='test other', 
  `political_party`='democrat' 
WHERE `username`='emoore24'

Если вы используете PDO с подготовленными выражениями, это будет многопроще и безопаснее, и вам не придется беспокоиться о цитировании или экранировании литералов.Например, вот как я мог бы написать этот код:

$info = array(
  'about_me' => NULL, 
  'profile_pic' => NULL, 
  'political_party' => NULL,
  'econ_views' => NULL, 
  'religious_views' => NULL, 
  'abortion_view' => NULL,
  'gay_marriage' => NULL, 
  'other' => NULL
);

$query = "UPDATE `users` SET 
      `about_me`=:about_me, 
      `profile_pic`=:profile_pic, 
      `econ_views`=:econ_views,  
      `religious_views`=:religious_views,
      `abortion_view`=:abortion_view,
      `gay_marriage`=:gay_marriage, 
      `other`=:other, 
      `political_party`=:political_party 
    WHERE `username`=:username";

if (($stmt = $pdo->prepare($query)) == FALSE) {
  $err = $pdo->errorInfo(); die($err[2]);
}

$values = array_intersect_key($_POST, $info);
$values['username'] = 'emoore24';

if ($stmt->execute( $values ) == FALSE) {
  $err = $stmt->errorInfo(); die($err[2]);
}
2 голосов
/ 29 января 2012

Вам нужно процитировать текст в вашем запросе

UPDATE `users` SET `about_me`='about_me'

И сделать то же самое для других полей.

1 голос
/ 29 января 2012

Ваш запрос неверный. Вам нужно заключить в кавычки все значения:

Измените ваш запрос следующим образом:

$query = "UPDATE `users` SET `about_me`='about_me', `profile_pic`='$profile_pic',   `econ_views`='$econ_views',`religious_views`='$religious_views',`abortion_view`='$abortion_view',`gay_marriage`='$gay_marraige', `other`='$other', `political_party`='$political_party' WHERE `username`='emoore24'";

Надеюсь, что это работает:)

0 голосов
/ 29 января 2012

profile_pic =, также выглядит неправильно. Я запускаю свои запросы вручную в редакторе командной строки mysql или редакторе командной строки mysql, чтобы узнать, в чем заключаются проблемы.

Я также начинаю с небольшого оператора select и собираю его. После того, как у меня есть оператор выбора, который работает, я переключаю его на оператор обновления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...