绑定布尔值的 bind_param 问题
Posted
技术标签:
【中文标题】绑定布尔值的 bind_param 问题【英文标题】:bind_param problem with binding boolean values 【发布时间】:2010-10-02 08:39:05 【问题描述】:我在 php5 中使用 mysqli_stmt::bind_param
绑定布尔值时遇到问题。
SQL 查询如下:
insert into `nvp_notes` (subject,messageid,receivedate,read) values (?,?,?,?)
'read' 是一个 tinyint,0 或 1,因为我在使用 mysqli 时遇到了一些问题。所以我在 bind_param 中列出的类型是:
$stmt->bind_param('sdsd', ...);
我也尝试过 'sdsb' 和 'sdss' 但似乎没有任何效果,而且我总是收到消息:
警告:mysqli_stmt::bind_param(): 变量数与准备语句中的参数数不匹配
当我删除语句中的读取字段时,一切正常。我已经没有这个想法了。确定 bind_param 可以与布尔值一起使用吗?
【问题讨论】:
【参考方案1】:您可以使用 intval() 将布尔值转换为 1 或 0(或使用 (int) 或 (integer) 进行转换)。根据mysqli_stmt::bind_param()'s documentation,您可以绑定的唯一类型是整数、双精度、字符串和blob。
【讨论】:
【参考方案2】:感谢您的回答,我终于设法解决了这个问题(在尝试了类型转换,甚至通过在查询中将其修复为 1 或 0 将其排除在 bind_param 之外)。无论如何,'read' 是 MySQL 中的保留列名,所以我只是更改了列名,它工作正常。但是对于此类问题,收到该特定错误消息似乎很奇怪。
【讨论】:
【参考方案3】:由于您需要绑定的实际上是一个整数,所以我会将 'd'(double) 替换为 'i':
$stmt->bind_param('sisi', ...);
【讨论】:
以上是关于绑定布尔值的 bind_param 问题的主要内容,如果未能解决你的问题,请参考以下文章