`
yeyuan
  • 浏览: 231435 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Parameter 2 to mysqli_stmt::bind_param() expected to be a reference

阅读更多
今天在用brophp(是lamp兄弟连里的一个框架),写程序的时候,老是报一个错误,具体情况是这样的

if(empty($_GET['id'])) $this->error('数据不存在');
	$c = D('news');
	$id = $_GET['id'];
	$num = $c->total();
	$page = new Page($num,10);
	$data = $c->where(array('categoryid'=>$id))->limit($page->limit)->select();	
	/*问题就出在这个地方了,我加了这个where条件,它就报错,如果不加,就正常,而且在报错的时候	调试信息里打印的时候sql语句,我在phpmyadmin里执行了下,也正常,可以查到数据,也就是说sql语句是没有问题的,后来在论坛里找到了方法与原因,看下面*/
	$this->assign('p',$page->fpage());
	$this->assign('data',$data);
	//P($da);
	$this->display('index/nlist');


运行时警告[在文件 H:\aphp\BroPHPTest\brophp\bases\dmysqli.class.php 中,第 75 行]:Parameter 2 to mysqli_stmt::bind_param() expected to be a reference, value given
    SQL ERROR: [0] No data supplied for parameters in prepared statement

这个是它提示的错误,按照提示,找到dmysqli.class.php的75行。它的代码是
call_user_func_array(array($stmt, 'bind_param'),$value);

换成
call_user_func_array(array($stmt, 'bind_param'), self::refValues($value));

然后,在这个文件里的其它地方,添加上这段代码
function refValues($arr){
if (version_compare(PHP_VERSION, '5.3.0') >= 0) {
	$refs = array();
	foreach($arr as $key => $value)
		$refs[$key] = &$arr[$key];
		return $refs;
	}
		return $arr;
}


根据最后的这个函数,觉得这个应该和php的版本有关,所以暂时记录下吧。
分享到:
评论

相关推荐

    PHP的mysqli_stmt_init()函数讲解

    mysqli_stmt_bind_param($stmt,"s",$country); ``` 7. 执行预处理语句,使用 `mysqli_stmt_execute()` 函数。 ```php mysqli_stmt_execute($stmt); ``` 8. 绑定结果变量,使用 `mysqli_stmt_bind_result()` 函数,...

    4.9 mysqli_fetch_array记录集获取.pptx

    2. MYSQLI_NUM:只包含数字索引的数组,列的顺序与在SQL查询结果中的顺序一致。 3. MYSQLI_BOTH:包含关联和数字索引的数组,这是默认行为。 4. MYSQLI_ROW:返回原始的数据库行数据,没有经过任何处理。 示例代码...

    PHP的mysqli_query参数MYSQLI_STORE_RESULT和MYSQLI_USE_RESULT的区别

    MYSQLI_USE_RESULT : MYSQLI_STORE_RESULT)); 在php manul上面对这两个参数是这样解释的。 复制代码 代码如下: Either the constant MYSQLI_USE_RESULT or MYSQLI_STORE_RESULT depending on the desired behavior...

    MySQLi函数速查手册.zip_MYSQL_手册_速查

    2. `mysqli_stmt_bind_param()`:绑定参数到预处理语句。 3. `mysqli_stmt_execute()`:执行预处理语句。 4. `mysqli_stmt_fetch()`:获取预处理语句的结果。 5. `mysqli_stmt_close()`:关闭预处理句柄。 四、...

    第六章 使用Mysqli操作数据库

    预处理语句可以防止SQL注入攻击,使用`mysqli_prepare()`准备SQL语句,然后使用`mysqli_stmt_bind_param()`绑定参数。例如: ```php $stmt = mysqli_prepare($conn, "INSERT INTO users (name, email) VALUES (?,...

    PHP mysqli_free_result()与mysqli_fetch_array()函数详解

    2. mysqli_free_result()函数用于释放与result标识符关联的结果内存。在完成对结果集的处理后,调用mysqli_free_result()可以释放服务器上的内存资源,这在处理大型结果集时尤其重要。如果没有显式调用mysqli_free_...

    4.8 mysqli_fetch_assoc记录集获取.pdf

    知识点 2: 记录集获取 记录集是指 SQL 查询结果的集合,例如 SELECT 语句执行的结果。记录集可以包含多行数据,每行数据对应一个数组。mysqli_fetch_assoc 函数可以将记录集的一行保存至关联数组中。 例如: ```...

    PHP5.5 mysqli如何连接MySQL数据库和读取数据.rar

    2. 绑定参数:使用`mysqli_stmt_bind_param()`函数将变量绑定到预编译的语句中的占位符。 3. 执行语句:使用`mysqli_stmt_execute()`函数执行预编译的语句。 4. 获取结果:根据查询类型,可能需要使用`mysqli_stmt_...

    PHP MySQL 预处理语句.rar

    mysqli_stmt_bind_param($stmt, "ss", $username, $password); ``` 3. 执行(Execute): 一旦参数被绑定,就可以使用`mysqli_stmt_execute()`函数执行预处理语句。 ```php mysqli_stmt_execute($stmt); ```...

    对PHP中mysqli扩展模块的探究及应用.pdf

    mysqli 扩展模块包括三个类:mysqli、mysqli_result 和 mysqli_stmt。 1. mysqli 类:用于连接 MySQL 服务器和选择数据库。 2. mysqli_result 类:用于获取查询结果。 3. mysqli_stmt 类:用于执行预处理语句。 ...

    对比PHP对MySQL的缓冲查询和无缓冲查询

    若需一次性获取所有结果,可以调用`mysqli_stmt::store_result`,然后使用`mysqli_stmt::$num_rows`获取行数。注意,`mysqli_stmt::$num_rows`只在调用`store_result`后可用,而`mysqli_result::$num_rows`则没有这...

    PHP中mysqli_affected_rows作用行数返回值分析

    printf("Can't connect to localhost. Error: %s\n", mysqli_connect_error()); exit(); } mysqli_query($link, "CREATE TABLE Language SELECT * from CountryLanguage"); printf("Affected rows (INSERT): %d\n...

    php操作mysql入门教程

    在实际应用中,为了确保安全性,应使用预处理语句(例如`mysqli_prepare()`和`mysqli_stmt_bind_param()`)防止SQL注入攻击。同时,记得在每次操作数据库后检查是否成功,并处理可能出现的错误。 例如,以下是一个...

    PHP mysqli 操作数据库.rar

    预处理语句可以防止SQL注入,使用`mysqli_prepare()`创建预处理语句,然后使用`mysqli_stmt_bind_param()`绑定参数,最后`mysqli_stmt_execute()`执行。例如: ```php $stmt = mysqli_prepare($conn, "INSERT ...

    php连接mysql之mysql_connect()与mysqli_connect()的区别

    因此,开发人员应该转向使用`mysqli_connect()`或PDO_MySQL扩展来代替`mysql_connect()`。 `mysql_connect()`是旧版的MySQL扩展的一部分,它不支持面向对象的编程,只支持过程式编程风格。它的语法如下: ```php ...

    PHP数据库编程

    "`,使用预处理语句`mysqli_prepare()`、`mysqli_stmt_bind_param()`和`mysqli_stmt_execute()`执行删除操作,确保安全性。 五、修改(UPDATE) 1. 更新记录:`UPDATE table_name SET column1 = value1, column2 =...

    MySQLi扩展库来袭—课程源代码

    mysqli_stmt_bind_param($stmt, 'si', $value1, $value2); $value1 = 1; $value2 = 'example'; mysqli_stmt_execute($stmt); ``` 在处理结果集时,可以使用`mysqli_fetch_assoc()`或`mysqli_fetch_array()`。前者...

    php连接数据库实现增删改查

    mysqli_stmt_bind_param($stmt, "ss", $newData['name'], $newData['email']); mysqli_stmt_execute($stmt); ``` 这里使用了预处理语句,提高了代码的安全性,防止SQL注入。 对于删除数据,我们可以这样编写: ```...

Global site tag (gtag.js) - Google Analytics