Php 警告:PDOStatement::execute()要求参数1为数组、字符串

Php 警告:PDOStatement::execute()要求参数1为数组、字符串,php,Php,我想从数据库中提取32个值,但不是在32个不同的事务中。我得到了这个警告,但我不明白它有什么问题 $team = "SELECT teamname FROM teamnames WHERE"; for ($j = 1; $j <= 32; ++$j) { teamid == "$j"; if ($j != 1) { $team .= ","; } if ($j == 32) { $team .= "\")"; } }

我想从数据库中提取32个值,但不是在32个不同的事务中。我得到了这个警告,但我不明白它有什么问题

$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.
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上使用execute命令时。如果您有参数,那么您应该希望在execute中使用array。请参阅以下示例

$userQuery = $dbh->prepare("SELECT * FROM user where id = ?");
$userQuery->execute(array($_SESSION['user']));
$userData = $userQuery->fetch(PDO::FETCH_ASSOC); 
当您在PDO上使用execute命令时。如果您有参数,那么您应该希望在execute中使用array。请参阅以下示例

$userQuery = $dbh->prepare("SELECT * FROM user where id = ?");
$userQuery->execute(array($_SESSION['user']));
$userData = $userQuery->fetch(PDO::FETCH_ASSOC); 

$team不是一个已准备好的语句。您不需要为该select准备一个已准备好的语句,因为您没有使用占位符。另一方面,您可能希望清理代码。有一个名为$teamid的变量您没有使用。结果SQL也没有多大意义,或者从teamname中选择teamname,其中,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,。这是您的实际代码吗?teamid是数据库中的一列,值是自动递增的,因此我尝试从数据库中的每个teamid中提取teamname。$team不是一个准备好的语句。您不需要为该选择准备一个准备好的语句,因为您没有使用占位符。另一方面,您可能希望清理代码。有一个名为$teamid的变量您没有使用。结果SQL也没有多大意义,或者从teamname中选择teamname,其中,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,。这是您的实际代码吗?teamid是数据库中的一列,值是自动递增的,因此我尝试从数据库中的每个teamid中提取teamname。