警告: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(); 
} 
+4

'$ team'不是准备好的语句。 – nickb

+0

由于您没有使用占位符,因此您不需要为该选择准备好声明。 另一方面,你可能想要清理你的代码。有一个名为$ teamid的变量,你没有使用。结果SQL也没有多大意义(SELECT teamname FROM teamnames WHERE ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)) 。那是你的实际代码吗? – mpratt

+0

那么,teamid是数据库中的一列,这些值是自动递增的,因此我试图从数据库中的每个teamid拉出队名。 –

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);