PDO:选择时通过数组绑定数据


PDO: Binding data trough an array when selecting

我试图设置一个数组,其中包含我的PDO查询在文件上所需的所有参数,而这些查询中的第一个是SELECT,仅使用一个参数。

$data = array(
            'us_id'   => $_POST['us_id'],
            'us_credits' => $_POST['us_credits'],
            'us_access' => $_POST['us_access']
        );
$selectUsers= "SELECT * FROM ws_users WHERE us_id= :us_id";
$statementSelectUsers = $pdo->prepare($selectUsers);
$statementSelectUsers->execute($data);
$result = $statementSelectUsers->fetch(PDO::FETCH_ASSOC);
$us_fk_ui_id =  $result['us_fk_ui_id'];

执行时,出现致命错误:

致命错误:未捕获的异常'PDOException'带有消息SQLSTATE[HY093]: Invalid parameter number:绑定变量的个数不匹配token的数量C:'wamp'www'waisap'actions'ad_updateUserInfo.php on line 25

第25行是$statementSelectUsers->execute($data);

据我所知,PDO上的SELECT查询不需要execute(),但如果不执行查询,我就不能将数组中包含的绑定数据传递给查询的占位符。这就是错误的原因吗?如何传递一个数组应用于我的SELECT查询的占位符?

让我重复一下5分钟前我在另一个答案中告诉你的:

数组键必须匹配查询中的占位符。如果你的查询有不同的占位符集,你也需要不同的数组。

所以,这就是这个问题的原因。

据我所知,PDO上的SELECT查询不需要执行(),

你学错了。你必须执行已经准备好的一切。

首先,创建只有一个元素的$data数组,并将其用于SELECT

$data = array('us_id'   => $_POST['us_id']);
$stmt = $pdo->prepare("SELECT us_fk_ui_id FROM ws_users WHERE us_id= :us_id");
$stmt->execute($data);
$us_fk_ui_id = $stmt->fetchColumn();
对于后面的查询,

将其他项添加到该数组