我正在尝试这个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 post和this other post,他们都有关于可能出错的有趣信息。但是我已经检查过,一切似乎都没问题。
答案 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ó!';}