php的pdo参数为空,php – PDO准备语句中的参数号无效

我正在使用PDO类创建的一系列查询,在某些情况下,我的查询需要相同的参数.

我创建了一个在foreach语句中使用的数组,它保存数据,但是一些变量来自外部,我可以在一个查询中使用这两个数据吗?

这个例子:

// $connection is the PDO object;

// $full_data contains:

// $full_data[$i]["address"]

// $full_data[$i]["phone"]

// $full_data[$i]["email"]

// $full_data[$i]["user_id"]

// $full_data[$i]["surname"] // not used but present

// $full_data[$i]["name"] // not used but present

$sql = "UPDATE users_table SET city = :address, phone = :phone, email = :email, admin_id = :admin_id, admin_name = :admin_name WHERE user_id = :user_id";

$statement = $connection->prepare ($sql);

$statement->bindParam (':admin_id', trim($admin_id), PDO::PARAM_INT);

$statement->bindParam (':admin_name', trim($admin_name), PDO::PARAM_STR);

foreach ($full_data as $value) {

$ok = $statement->execute ($value);

$num = $statement->rowCount ();

}

} catch (PDOException $e) {

return $e->getMessage ();

}

这个页面返回错误:

SQLSTATE [HY093]:参数号无效:绑定变量数与令牌数不匹配

究竟是什么问题,在UPDATE语句中该技术有效

解决方法:

该死的,我在下班后发现了这个问题……

// $connection is the PDO object;

// $full_data contains:

// $full_data[$i]["address"]

// $full_data[$i]["phone"]

// $full_data[$i]["email"]

// $full_data[$i]["user_id"]

// ==> $full_data[$i]["surname"] // not used but present

// ==> $full_data[$i]["name"] // not used but present

未保存在查询[“surname”]和[“name”]中的数组数据会生成错误.

看起来像execute();需要精确的阵列数据结构.

我用这个解决了这个问题:

$sql = "UPDATE users_table SET city = :address, phone = :phone, email = :email, admin_id = :admin_id, admin_name = :admin_name WHERE user_id = :user_id";

$statement = $connection->prepare ($sql);

// must be removed ==> $statement->bindParam (':admin_id', trim($admin_id), PDO::PARAM_INT);

// must be removed ==> $statement->bindParam (':admin_name', trim($admin_name), PDO::PARAM_STR);

for ($i = 0; $i < count($full_data); $i++) {

$full_data[$i]["admin_name"] = "the admin name";

$full_data[$i]["admin_id"] = "100";

unset ($full_data[$i]["surname"]); // IMPORTANT: must remove the unused vars

unset ($full_data[$i]["name"]); // IMPORTANT: must remove the unused vars

}

foreach ($full_data as $value) {

// bindParam can be avoided, but it's recommended for data type security

$statement->bindParam(':address', trim($value['address']), PDO::PARAM_STR);

$statement->bindParam(':phone', trim($value['phone']), PDO::PARAM_STR);

$statement->bindParam(':email', trim($value['email']), PDO::PARAM_STR);

$statement->bindParam(':admin_id', trim($value['admin_id']), PDO::PARAM_INT);

$statement->bindParam(':admin_name', trim($value['admin_name']), PDO::PARAM_STR);

$ok = $statement->execute ($value);

$num = $statement->rowCount ();

}

} catch (PDOException $e) {

return $e->getMessage ();

}

标签:php,mysql,exception,pdo

来源: https://codeday.me/bug/20190717/1484859.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值