2012-09-15 21 views
6

Estoy utilizando MySQL 5.1 alojado en mi ISP. Esta es mi consultaError de sintaxis con IF EXISTS UPDATE ELSE INSERT

mysql_query(" 
IF EXISTS(SELECT * FROM licensing_active WHERE title_1='$title_1') THEN 
    BEGIN 
     UPDATE licensing_active SET time='$time' WHERE title_1='$title_1') 
    END ELSE BEGIN 
     INSERT INTO licensing_active(title_1) VALUES('$title_1') 
    END 
") or die(mysql_error()); 

El error es

... check the manual that corresponds to your MySQL server version for the right syntax to use near 'IF EXISTS(SELECT * FROM licensing_active WHERE title_1='Title1') THEN ' at line 1 

Mi tarea actual consiste en

WHERE title_1='$title_1' AND title_2='$title_2' AND version='$version' ...ETC... 

pero han reducido hacia abajo para hacer las cosas más simples para mi resolución de problemas

En mis búsquedas sobre esto, sigo viendo referencias a 'ACTUALIZACIÓN DE LLAVE DUPLICADA', pero no sé qué t o hazlo con eso.

Respuesta

19

Aquí hay una solución simple y fácil, pruébalo.

$result = mysql_query("SELECT * FROM licensing_active WHERE title_1 ='$title_1' "); 

if(mysql_num_rows($result) > 0) { 
    mysql_query("UPDATE licensing_active SET time = '$time' WHERE title_1 = '$title_1' "); 
} 
else 
{ 
    mysql_query("INSERT INTO licensing_active (title_1) VALUES ('$title_1') "); 
} 
+2

Eso funciona para mí, gracias. Y parece fácil de entender y recordar. Puede que no sea súper eficiente, pero esta aún no es una aplicación de alto tráfico, así que estoy seguro de que este método estará bien por un año o más. Gracias. – Openstar63

14

Esto debería hacer el truco para usted:

insert into 
    licensing_active (title_1, time) 
    VALUES('$title_1', '$time') 
    on duplicate key 
     update set time='$time' 

Esto es suponiendo que title_1 es una columna única (forzada por la base de datos) en la tabla.

La forma en que insert... on duplicate funciona es que intenta insertar una nueva fila primero, pero si la inserción se rechaza porque una tecla lo detiene, le permitirá actualizar ciertos campos en su lugar.

+0

Hi Fluffeh. title_1 no es único. La única columna única que tengo es una identificación llamada int. Se establece como 'auto_increment', 'unique' y 'primary'. No accedo a él directamente. Todavía estoy luchando con el mismo error. – Openstar63

+0

No pude llegar allí, así que hice la lógica en PHP, como describe Dark Wish. Gracias sin embargo. – Openstar63

+0

funciona para mí cuando elimino 'set' al final. es decir, 'INSERT INTO

(col1, col2) VALUES (' f1 ',' f2 ') EN LA ACTUALIZACIÓN DUPLICADA DE LA LLAVE col2 =' fn'' –