MYSQL:为什么这个更新查询不起作用?

时间:2015-01-12 22:34:13

标签: php mysql sql

我正在尝试这个SQL查询,它不会工作:

<form name="modificarUsuario" action="" method="POST">
<h2>Modificación de Datos Personales</h2>
Username: <input type="text" name="username" />  
Nombre Completo: <input type="text" name="nombre" />  
Email: <input type="text" name="email" />  
Clave: <input type="text" name="pass" />  
<input type="submit" class="button" name="modificarDatos" value="Modificar datos">
<br>
</form>

$usuario = $_POST['username'];
$nombre = $_POST['nombre'];
$email = $_POST['email'];
$clave = $_POST['pass'];
$uid = 1;
$consulta = mysqli_prepare($conectar,
                "UPDATE usuario 
                 SET username = ?, pass = ?, name = ?, email = ?) 
                 WHERE uid = '".$uid."'
                ");
if ($consulta) {
    mysqli_stmt_bind_param( $consulta, 'ssss', $usuario, $clave, $nombre, $email);
    mysqli_stmt_execute($consulta);
    echo 'Se guardaron los cambios';
}
else {echo 'Hubo un error! El cambio no se guardó!';}
mysqli_stmt_close($consulta); //here's line 52

错误是:

  

PHP警告:mysqli_stmt_close()需要参数1   mysqli_stmt,在...中给出的布尔值

数据库有一个&#34; usuario&#34;桌子,有一个&#34; uid&#34;字段,这是一个整数。 所有字段拼写正确且顺序正确: uid,用户名,密码,姓名,电子邮件

我已阅读this postthis other post,他们都有关于可能出错的有趣信息。但是我已经检查过,一切似乎都没问题。

2 个答案:

答案 0 :(得分:4)

您的SQL文本(包含UPDATE语句的字符串)中有一个虚假的关闭字符。这是MySQL语法违规。

, email = ?) 
           ^

如果mysqli_prepare失败(即返回FALSE),您应该使用mysqli_error($connectar)检索错误消息,以便查看语法错误。

 else {
    echo 'Hubo un error! El cambio no se guardó!';
    echo mysqli_error($conectar);
 }

mysqli_stmt_close只有在有效的语句句柄的情况下才有效,因此应该将调用移到&#34;然后&#34;阻止,所以它只在prepare返回一个语句句柄时执行。

答案 1 :(得分:0)

来自manual

  

mysqli_prepare()返回语句对象,如果发生错误则返回FALSE。

当你的prepare语句失败时,它会返回一个布尔值,这意味着$consulta不是一个语句而是一个布尔值。布尔值无法关闭,mysqli_stmt_close需要声明。因此,如果您将失败的预备语句传递给mysqli_stmt_close,则会收到您发布的错误。

所以只有在成功的情况下才能关闭

if ($consulta) {
    mysqli_stmt_bind_param( $consulta, 'ssss', $usuario, $clave, $nombre, $email);
    mysqli_stmt_execute($consulta);
    echo 'Se guardaron los cambios';
    mysqli_stmt_close($consulta);
}
else {echo 'Hubo un error! El cambio no se guardó!';}