2011-02-11 3 views
0

Хорошо, теперь я начинаю крутиться. Слишком много проб и ошибок сделало меня довольно сварливым.не может использовать ON DUPLICATE KEY UPDATE с php-скриптом

Я пытаюсь сделать INSERT и UPDATE, если EXISTS использует цикл. Я исключил код цикла из этого примера, чтобы упростить мою проблему.

Вот запрос в моем PHP скрипт:

function insertrating($ratingid, $rating){ 
    $link = resdb::connect(); 
    $r = mysqli_query($link, "INSERT INTO propertyrating (id,name)" 
          ."VALUES (\'$ratingid\',\'$rating\')\n" 
       ."ON DUPLICATE KEY UPDATE\n" 
       ."name = VALUES (name),\n" 
       ."description = VALUES (description)\n" 
       . ""); 
    if($r > 0){ 
     return true; 
    } 
} 
$mydbclass = new $dbclass(); 
$mydbclass->insertrating('3','3 Star'); 

Таблица выглядит следующим образом: идентификатор INT имя VARCHAR (100) текстовое описание

Я не хочу, чтобы добавить описание в этом сцена. Следовательно, никаких параметров для этого столбца

Я выполнил тот же запрос в phpMyAdmin и в консоли MySQL, оба работают. Таким образом, я предполагаю, что это что-то связано с моим синтаксисом.

Кроме того, если я избавлюсь от функции и параметров ON DUPLICATE KEY UPDATE, она будет работать. Однако, очевидно, не обновляет повторяющиеся строки.

Пожалуйста, спросите или исправьте, где я ошибаюсь. Благодарю.

EDIT: ЗАПРОШЕННЫЙ SQL

INSERT INTO 
propertyrating 
(
    id, 
    name 
) 
VALUES 
(
    '3', 
    '3 Star' 
) 
ON DUPLICATE KEY UPDATE 
name = VALUES (name), 
description = VALUES (description) 

AS ЗАПРОШЕННЫЙ UNIQUE * PK

Table is as follows: 

ID INT УНИКАЛЬНЫЙ И PRIMARY KEY имя VARCHAR (100) текстовое описание

OK РЕБЯТА ERROR ВОЗВРАЩЕННОГО :

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'UPDATEname = name,description = description 

как вы можете видеть, нет промежутка между UPDATE и именем (он читает, UPDATEname). Я добавил пространство символов, и теперь все это подливка.

Большое спасибо за получение меня mysqli_error($link)

не знаю, как дать ответ на zerkms, но у всех привели меня в правильном направлении, в первую очередь.

код теперь стоит как:

$r = mysqli_query($link, "INSERT INTO propertyrating (id,name)" 
         ."VALUES (\'$ratingid\',\'$rating\')\n" 
      ."ON DUPLICATE KEY UPDATE\n" 
      ."name = VALUES (name),\n" 
      ."description = VALUES (description)\n" 
      . "") or die("Error: ".mysqli_error($link)); 
+0

Замените '\ n' пробелом и покажите нам ** простой sql-запрос ** (без какого-либо php-кода), сгенерированный вашим скриптом. – zerkms

+2

Как насчет 'echo mysqli_error ($ link);' сразу после 'mysqli_query'? – zerkms

+0

Какая ошибка вы получаете? Этот запрос выглядит хорошо для меня ... У вас есть 'UNIQUE' on (' name'), если это возможно? Что-то еще происходит, так как запрос выглядит нормально ... – ircmaxell

ответ

1

Помещенный echo mysqli_error($link); сразу после mysqli_query получить случилось точно ошибка (если таковые имеются)

Но убедитесь, что вы удалили эту строку после этого сеанса отладки.

1

Трудно ответить, не видя ошибку вы получаете, но я думаю, что вы не должны включать этот пункт:

description = VALUES (description) 

ЦЕННОСТИ (имя) возвращает значение, указанное в INSERT, и вы не указали его для описания. Если оставить его, это приведет к тому, что описание не будет обновлено.

+0

+1. Я просто написал тот же ответ – Ben

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