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():变量的数量与绑定参数中准备好的语句中的参数数量不匹配

没有绑定参数的mysqli准备好的语句仍然安全吗?

mysqli 准备好的语句和 mysqli_real_escape_string

运行准备好的语句 (MySQL/PHP)

带有变量的Mysqli准备好的语句列[重复]

在 mysqli 准备好的语句中使用空值