Error con la consulta MySQL

De acuerdo, debo ser un idiota, porque esta es mi tercera pregunta de hoy. Aquí está mi código:

date_default_timezone_set("America/Los_Angeles");

include("mainmenu.php");

$con = mysql_connect("localhost", "root", "********");
 if(!$con){
  die(mysql_error());
}

$usrname = $_POST['usrname'];
$fname = $_POST['fname'];
$lname = $_POST['lname'];
$password = $_POST['password'];
$email = $_POST['email'];

mysql_select_db("`users`, $con) or die(mysql_error()");

$query = ("INSERT INTO `users`.`data` (`id`, `usrname`, `fname`, `lname`, `email`, `password`) 
VALUES (NULL, '$usrname', '$fname', '$lname', '$email', 'password'))");

mysql_query('$query') or die(mysql_error());

mysql_close($con);

echo("Thank you for registering!");

Siempre me devuelve el error como: "Tiene un error en la sintaxis SQL; consulte el manual que corresponde a la versión de su servidor MySQL para ver la sintaxis correcta para usar cerca de '$ query' en la línea 1. Ayude a un novato. Estoy a punto de apuñalar mi monitor.

preguntado el 09 de enero de 11 a las 02:01

eliminar las comillas de mysql_query ('$ consulta') -

no es un título muy útil -

jaja, ustedes rechazaron mi pregunta de novato -

Te olvidaste mysql_real_escape_string. Por lo general, esto indica aprender de un tutorial o libro muy, muy malo. Tirar a la basura. -

Quema el libro. Esparcir las cenizas. Usar PDO. -

4 Respuestas

1) En esta línea:

mysql_select_db("`users`, $con) or die(mysql_error()");

Debería ser:

mysql_select_db("users", $con) or die(mysql_error());

En este momento, tiene el código PHP dentro de la cadena que está enviando como nombre de la base de datos.

2) En esta línea:

mysql_query('$query');

Al usar comillas simples, la cadena literal $query se enviará en lugar del contenido de una variable llamada $query. Utilizar cualquiera mysql_query($query) or mysql_query("$query");

Además, donde creas $queryy donde tu echo mensaje de éxito, los paréntesis alrededor de la cadena son innecesarios.

DENTRO $query, tiene demasiados paréntesis de cierre. Tampoco puede escapar de ninguna de las entradas, por lo que si alguien escribe algo desagradable en su formulario (como cualquier cosa con un carácter de comilla simple), romperá su consulta.

Respondido el 09 de enero de 11 a las 06:01

¡DIOS MÍO! ¡MUCHAS GRACIAS! (te dije que era un novato) - Conocido

-1 por no señalar problemas de mysql_real_escape_string o SQL-inject en este código peligroso. - Johan

Excepto que señalé eso ... hace 3 meses ... esa es la última oración de la respuesta. - Dan Grossman

perdón por ser un murciélago ciego que hiciste, de alguna manera me perdí tu comentario - Johan

mysql_query($query) or die(mysql_error());

comillas no necesarias alrededor de su variable $ query.

las comillas simples (') no le permiten incrustar variables, mientras que las comillas dobles (") sí.

Respondido el 09 de enero de 11 a las 05:01

mysql_query ('$ consulta') => mysql_query ("$ consulta")

Respondido el 09 de enero de 11 a las 05:01

Cómo arreglar el agujero de inyección SQL

Cambiar este código

enter image description herecodificación de horror

$usrname = $_POST['usrname'];
$fname = $_POST['fname'];
$lname = $_POST['lname'];
$password = $_POST['password'];
$email = $_POST['email'];

Dentro de esto

$usrname = mysql_real_escape_string($_POST['usrname']);
$fname = mysql_real_escape_string($_POST['fname']);
$lname = mysql_real_escape_string($_POST['lname']);
$password = mysql_real_escape_string($_POST['password']);
$email = mysql_real_escape_string($_POST['email']);

contestado el 28 de mayo de 11 a las 23:05

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