Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用值0绑定_参数_Php_Mysqli_Bindparam - Fatal编程技术网

Php 使用值0绑定_参数

Php 使用值0绑定_参数,php,mysqli,bindparam,Php,Mysqli,Bindparam,当我执行: $stmt = $mysqli->prepare('SELECT * FROM TableName WHERE ColumnName = ?'); $tmp = 0; $stmt->bind_param('i', $tmp); 我收到错误消息: 未为准备语句中的参数提供数据 我必须做以下几点才能让它工作 $tmp = "0"; $stmt->bind_param('i', $tmp); 这正常吗? 此问题仅在插入0时发生。任何其他整数工作。错误地标记了参数 确

当我执行:

$stmt = $mysqli->prepare('SELECT * FROM TableName WHERE ColumnName = ?');
$tmp = 0;
$stmt->bind_param('i', $tmp);
我收到错误消息:

未为准备语句中的参数提供数据

我必须做以下几点才能让它工作

$tmp = "0";
$stmt->bind_param('i', $tmp); 
这正常吗? 此问题仅在插入
0
时发生。任何其他整数工作。

错误地标记了参数 确保在语句定义和
bind_param()
中,所有参数都以
作为前缀

不太可能,但无论您使用的是什么版本的PHP/PHPPDO,都可能存在数据类型转换问题。 尝试使用
intval()
,和/或显式声明数据类型(取决于php版本)

$tmp=(int)0;//php<5.1
$tmp=intval(0);//PHP5.2+(尽管在这些版本上,它可能不是数据类型。
旧版本的PHPPDO(和PHP)re:MySql vs MS-SQL。 MySql有一些内置的类型转换,例如,如果将
NULL
参数发送到
UPDATE
INSERT
INT
列,将转换为
0
。但是,旧版本的MS SQL不会为您执行此类型转换。

错误地标记了参数 确保在语句定义和
bind_param()
中,所有参数都以
作为前缀

不太可能,但无论您使用的是什么版本的PHP/PHPPDO,都可能存在数据类型转换问题。 尝试使用
intval()
,和/或显式声明数据类型(取决于php版本)

$tmp=(int)0;//php<5.1
$tmp=intval(0);//PHP5.2+(尽管在这些版本中,它可能不是数据类型。
旧版本的PHPPDO(和PHP)re:MySql vs MS-SQL。
MySql有一些内置的类型转换,例如,如果将
NULL
参数发送到
UPDATE
INSERT
INT
列,将转换为
0
。但是,旧版本的MS SQL不会为您进行这种类型转换。

这两种方法都不起作用,因为bind\u参数不接受常量值但仅限变量。我编辑了答案您可以添加要执行的查询吗?
SELECT*FROM TableName WHERE ColumnName=?
WHERE?我绑定0(见上文)这篇文章缺少一个最小的、完整的和可验证的示例。这两个示例都不起作用,因为bind_param不接受常量值,而只接受变量。我编辑了答案您可以添加要执行的查询吗?
SELECT*FROM TableName WHERE ColumnName=?
WHERE?我绑定0(见上文)这篇文章缺少一个最小的、完整的、可验证的例子。
$PHPPDO->prepare('SELECT * FROM users WHERE status =:i');

$tmp = 0;
$stmt->bind_param(':i', $tmp);
$tmp = (int) 0;  // php < 5.1
$tmp = intval(0); // php 5.2+ (though on these versions, it probably isn't the datatype.