Pregunta

¿Es válido hacer algo como esto, nunca veo más de 1 u operador:

$insert = 'INSERT into fhours (' .$cols . ') VALUES ('.$query.')';
$update = sprintf("UPDATE fhours SET %s WHERE fname='$fname' AND lname='$lname'", $field_list);

$result = $db->query($update) or $db->query($insert) or die('uhoh');`

¿Fue útil?

Solución

Hay dos problemas con esto.

La primera es que puede estar usando consultas parametrizadas. Mira el PDO,Esto te ayudará mucho .Esto no solo es más rápido para múltiples insertos, pero no tiene que preocuparse tanto por la inyección de SQL.

El segundo es que puede usar el ON DUPLICATE KEY UPDATE de MySQL/ a> para cuidar este problema para usted.De lo contrario, cuando falla su consulta, no sabe por qué falló.¡Puede que no haya sido un problema clave duplicado en absoluto!

Aparte de eso, el código del punto de vista del or está bien.

Otros consejos

Puedes cair tantos operadores lógicos como quieras.

También debe tener en cuenta los mecanismos de "On Duplicate Key" de MySQL.

http://dev.mysql.com/DOC / REFMAN / 5.0 / ES / INSERT-ON-DUPLICATE.HTML

es válido?Si.¿Se recomienda?No.

El problema con die()-ing de la consulta SQL fallida es lo que termina el usuario que termina, lo que es una pantalla horrible con una pequeña cantidad de texto.Eso es muy malo.

En su lugar, debe estar manejando estos errores de una manera que pueda pasar el fracaso de la finalización al usuario:

$update_result = $db->query($update);
if(!$update_result) {
  // Yikes! Tell the user something went wrong!
  // Show them an error page or error message
}

$insert_result = db->query($insert);
if(!$insert_result) {
  // Yikes! Tell the user something went wrong!
  // Show them an error page or error message
}

De hecho, también se recomienda echar un vistazo a set_error_handler , que le permite capturar errores fatales de PHPy en lugar de mostrar errores horribles que potencialmente expone a su ruta PHP como esta:

ERROR FATAL: No se puede usar Asignación Operadores con objetos sobrecargados ni String offsets en /check/out/my/directory/structure/wp-admin/includedes/file.php en la línea 688

Puede enviarlos a una página de error general, que se ve mucho más profesional.

Es posible que desee buscar en el reemplazo de MySQL en la sintaxis

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top