¿Qué pasa con esta consulta de actualización de MySQL?

Primero te daré la consulta y luego te diré lo que estoy tratando de lograr, ya que podría estar muy equivocado o muy cerca.

       mysql_query("UPDATE link_building SET 
ID=$ID,Site=$Site,Date=$Date,Target_Site=$Target_Site,
        Target_Contact_Email=$Target_Contact_Email,
    Target_Contact_Name=$Target_Contact_Name,
        Link_Type=$Link_Type,Link_Acquired=$Link_Acquired,
    Notes=$Notes,Link_URL=$Link_URL WHERE ID=" . $ID);

¿Qué estoy tratando de lograr? quiero actualizar los campos

("ID","Site","Date","Target_Site","Target_Contact_Email","Target_Contact_Name",
    "Link_Type","Link_Acquired","Notes","Link_URL")

en la tabla link_building con los valores almacenados en las variables

    ("$ID","$Site","$Date","$Target_Site","$Target_Contact_Email","$Target_Contact_Name",
"$Link_Type","$Link_Acquired","$Notes","$Link_URL")

Pero solo quiero actualizar el registro cuyo Id es igual a $ID.

ACTUALIZACIÓN: NO VEO NINGÚN ERROR. SUS REDIRECCIONES A link_building.php y muestra un mensaje de éxito pero no cambia los datos en la tabla MySQL.

preguntado el 09 de marzo de 12 a las 15:03

¿Estás viendo un error? Si es así, publíquelo en su pregunta. -

No dijiste qué sucede que no debería, pero voy a adivinar: no estás escapando de tus variables, eso es lo que está mal. Ver php.net/manual/en/function.mysql-real-escape-cadena.php (A la larga, aprender a usar PDO evitaría este problema por completo: php.net/manual/en/intro.pdo.php ) -

¿Cuál es el punto de buscar un valor con una 'ID' específica que acaba de configurar? -

Aparte del hecho de que no tiene comillas alrededor de sus valores en su consulta, me parece correcto. ¿Qué error(es) estás recibiendo? -

@KorhanÖztürk: Es al revés: la consulta primero busca el ID, luego lo establece (por lo que es posible cambiarlo). Por supuesto, si el OP no busca cambiarlo (como se ve aquí), no tiene sentido. -

3 Respuestas

Intente escapar los datos y eliminar la actualización de la ID ya que ya está en sus condiciones:

mysql_query("UPDATE link_building SET Site='".mysql_real_escape_string($Site)."',Date='".mysql_real_escape_string($Date)."',Target_Site='".mysql_real_escape_string($Target_Site)."', Target_Contact_Email='".mysql_real_escape_string($Target_Contact_Email)."', Target_Contact_Name='".mysql_real_escape_string($Target_Contact_Name)."', Link_Type='".mysql_real_escape_string($Link_Type)."',Link_Acquired='".mysql_real_escape_string($Link_Acquired)."', Notes='".mysql_real_escape_string($Notes)."',Link_URL='".mysql_real_escape_string($Link_URL)."' WHERE ID=" . intval($ID));

respondido 09 mar '12, 15:03

Además, es probable que desee mysql_real_escape_string($var) cada una de esas variables. - guardabosques

Por un lado, está olvidando que aún necesita citar sus cadenas;

mysql_query("UPDATE link_building SET Site='$Site', Date='$Date',".  
            "Target_Site='$Target_Site', Target_Contact_Email='$Target_Contact_Email',".
            "Target_Contact_Name='$Target_Contact_Name', Link_Type='$Link_Type',".
            "Link_Acquired='$Link_Acquired', Notes='$Notes', Link_URL='$Link_URL' ".
            "WHERE ID=$ID");

Tenga en cuenta el agregado 's alrededor de todas las cuerdas.

comentario de bonificación; realmente deberías estar usando mysql_real_escape_string () en sus cadenas antes de pasarlas a la base de datos.

respondido 09 mar '12, 15:03

si sus columnas se nombran como Target Site (con un espacio en él), debe abordarlo así en su consulta (lo que lo obligará a agregarle acentos graves). además, tendrá que agregar comillas a las columnas que almacenan cualquier otra cosa que se encadene. su consulta debería verse así:

UPDATE
  link_building
SET 
  ID = $ID,
  Site = '$Site',                   // single quotes for values
  Date = '$Date',                   // ...
  ´Target Site´ = '$Target_Site'    // and ´ for fields
  [...]

esto debería resolver por qué la consulta no funciona (además: no cómo un bit o formato lo hace mucho más más legible).

no ha proporcionado información al respecto, pero tenga en cuenta que siempre debe desinfectar sus variables antes de usarlas (su código no parece que lo haga) para evitar inyecciones de sql. puedes hacer esto usando mysql_real_escape_cadena o, mejor aún, empieza a usar declaraciones preparadas.

respondido 09 mar '12, 15:03

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.