首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysqli bind_param

mysqli bind_param
EN

Stack Overflow用户
提问于 2013-03-01 19:40:43
回答 2查看 1.7K关注 0票数 0

假设我们有一个包含字段'id‘和'num’的表'item‘,并且下面这样的代码不起作用。

代码语言:javascript
复制
$db = new mysqli('localhost', 'user', 'pass', 'db') ;
if (!$st  =  $db->prepare('select id from item')) die($db->error) ;
if (!$st2 =  $db->prepare('update item set num = 1 where id = ?')) die($db->error) ;

$st->execute() ;
$st->bind_result($id) ;

while ($st->fetch()) {

    $st2->bind_param('i', $id) ;
    $st2->execute() ;
    echo $id.'<br/>' ;
}

它只是打印出类似^1 2 3的内容,但没有任何更改会占用数据库的id ($st2->affected_rows等于零)。它有什么问题?

附注:不是真正的代码,但它完全描述了问题。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-01 19:46:51

它有什么问题?

由于某些原因,您没有对execute进行错误检查。

代码语言:javascript
复制
$st2->execute() or trigger_error($db->error);

将告诉您查询是否有错误。

如果没有-检查您检查更新值的方式。

顺便说一句,更好的代码版本

代码语言:javascript
复制
$dsn = 'mysql:host=localhost;dbname=db;charset=utf8';
$opt = array(
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
);
$pdo = new PDO($dsn,'user','pass', $opt);

$sth = $db->prepare('select id from item');
$sth->execute();
$ids = $sth->fetchAll();

$sth = $db->prepare('update item set num = 1 where id = ?');
foreach ($ids as $row) {
    $sth->execute($row['id']);
}
票数 1
EN

Stack Overflow用户

发布于 2013-03-01 19:43:31

根据文档,在执行之前必须调用bind_result:

代码语言:javascript
复制
$st->bind_result($id) ;
$st->execute() ;
while ($st->fetch()) {

    $st2->bind_param('i', $id) ;
    $st2->execute() ;
    echo $id.'<br/>' ;
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15156862

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档