MySQLi准备好的语句不绑定整数
Posted
技术标签:
【中文标题】MySQLi准备好的语句不绑定整数【英文标题】:MySQLi prepared statement not binding integer 【发布时间】:2018-08-20 14:29:17 【问题描述】:我是准备好的语句的新手。如果我插入虚拟数据并且它在没有绑定整数($id)的情况下工作,则 SQL 查询工作正常。
我哪里错了?
sql = "UPDATE staff_type SET s_type=?, description=? WHERE s_type_id=?;";
$stmt = mysqli_stmt_init($conn);
mysqli_stmt_prepare($stmt, $sql));
mysqli_stmt_bind_param($stmt, "ssi", $type, $desc, $id);
mysqli_stmt_execute($stmt);
【问题讨论】:
绑定参数前必须准备好声明 $id 是从哪里来的?您是否检查过它的值以确保它确实是一个整数? 请编辑您的问题以包含var_dump($stmt, $sql, $type, $desc, $id);
的输出。
【参考方案1】:
我发现导致整数参数无法绑定的错误。我不知道禁用的输入字段无法发布数据,因此我找到了一个解决方案,将“禁用”属性替换为“只读”。
【讨论】:
【参考方案2】:在绑定参数之前,您必须准备一条带有参数的 SQL 语句。
$sql = "UPDATE staff_type SET s_type=?, description=? WHERE s_type_id=?;";
$stmt = $conn->prepare($sql);
$stmt->bind_param("ssi", $type, $desc, $id);
$stmt->execute();
【讨论】:
请检查我的代码,我已经编辑了它但没有工作 现在要查看该查询的结果,您必须FETCH 结果。【参考方案3】:你必须先准备声明
**Procedural style**
$stmt = mysqli_prepare($conn, "UPDATE staff_type SET s_type=?, description=? WHERE s_type_id=?");
mysqli_stmt_bind_param($stmt, "ssi", $type, $desc, $id);
mysqli_stmt_execute($stmt);
查看http://php.net/manual/en/mysqli-stmt.bind-param.php
【讨论】:
【参考方案4】:试试这个
$sql= $con->prepare("update staff_type set s_type=?, description=? WHERE s_type_id = ?");
if ($result)
$sql->bind_param('ssi', $s_type, $desc, $s_type_id );
$sql->execute();
旁注:s代表字符串,i代表整数
希望对你有帮助
【讨论】:
感谢您的回答,看来我在输入字段属性中犯了一个愚蠢的错误以上是关于MySQLi准备好的语句不绑定整数的主要内容,如果未能解决你的问题,请参考以下文章
mysqli_stmt_bind_param():变量的数量与绑定参数中准备好的语句中的参数数量不匹配