警告:PDOStatement :: execute()期望参数1是数组,字符串
问题描述:
我想从数据库中提取32个值,但不是32个不同的事务中。我得到这个警告,我并没有把握它有什么问题。警告:PDOStatement :: execute()期望参数1是数组,字符串
$team = "SELECT teamname FROM teamnames WHERE";
for ($j = 1; $j <= 32; ++$j) {
teamid == "$j";
if ($j != 1) {
$team .= ",";
}
if ($j == 32) {
$team .= "\")";
}
}
$teamselect = $db->prepare($team);
$teamselect->execute($team);
for ($y = 1; $y <= 32; ++$y) {
$_SESSION["team$y"] = $teamselect->fetchColumn();
}
答
PDOStatement::execute
带有一个数组作为它的第一个参数,其中所述索引相匹配的索引或键的占位符。
$team="SELECT teamname FROM teamnames WHERE teamname.id = ?";
$stmt = $pdo->prepare($team);
$stmt->execute(array($yourteamid));
现在给你的代码中,我将做到以下几点:
$ids = range(1,32);
$team = sprintf(
'SELECT teamnames.teamname FROM teamnames WHERE teamnames.teamid IN (%s)',
implode(',', array_fill(1, count($ids), '?'))
);
$teamselect=$db->prepare($team);
$teamselect->execute($ids);
// then do whatever with your results.
答
当您使用上PDO
命令。然后,你应该要使用数组中如果你有parameters.Refer以下例。
$userQuery = $dbh->prepare("SELECT * FROM user where id = ?");
$userQuery->execute(array($_SESSION['user']));
$userData = $userQuery->fetch(PDO::FETCH_ASSOC);
'$ team'不是准备好的语句。 – nickb
由于您没有使用占位符,因此您不需要为该选择准备好声明。 另一方面,你可能想要清理你的代码。有一个名为$ teamid的变量,你没有使用。结果SQL也没有多大意义(SELECT teamname FROM teamnames WHERE ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)) 。那是你的实际代码吗? – mpratt
那么,teamid是数据库中的一列,这些值是自动递增的,因此我试图从数据库中的每个teamid拉出队名。 –