PHP SQL查询错误 - WHERE子句中的未知数组列

时间:2013-10-10 11:53:11

标签: php mysql sql

我的页面使用下拉菜单显示某个运动队的球员姓名。教练可以登录选择他的球队并选择他的球队将要对抗的对手。 当用户选择了团队并且反对时,他点击提交并触发了isset功能。

现在我从下拉菜单中捕获值并将其上传到数据库中的正确表。一切都很直接,但是当我点击提交时,我得到了错误。任何帮助将不胜感激

if ( isset($_POST['submit']) ) {
    $player_ids = array_map('intval', $_REQUEST['players']);
    $opponents_id = $_REQUEST['players'];

    var_dump($player_ids);
    var_dump($opponents_id);

    $query = 'SELECT `name`, `position` 
        FROM `player_info` 
        WHERE `player_id` IN (' . implode(',', $player_ids) . ')';

    $return_names = mysql_query($query) or die(mysql_error());

         while ( $row = mysql_fetch_assoc($return_names) ) 
        {
            $selected[] = $row['name'];
            $position[] = $row['position'];
        }

    $query = ("SELECT `fixture_id` 
                FROM `fixtures`     
                WHERE `fixture_id` = $opponents_id") 
                or die (mysql_error()); 

    $result = mysql_query($query) or die(mysql_error());

                while ($row = mysql_fetch_array($query))
                {
                    $fixture_id[] = $row['fixture_id']; 

                }
                        for ($i=0; sizeof($selected) > $i; $i++){
                             $sql = mysql_query("INSERT INTO `team` (`selection_id`, `fixture_id`, `player_position`,`player_name`) 
                                                VALUES ('$fixture_id[$i]','$position[$i]','$selected[$i]')") 
                                                or die(mysql_error());
                                echo $selected[$i]; 
                                echo $position[$i];
                                echo $fixture_id[$i];
                                echo'<br>';


}       

enter image description here

enter image description here

4 个答案:

答案 0 :(得分:3)

'where子句'中的未知列'Array'错误意味着字面意思 - 您试图将数组值放入where子句中。

在这一行:

$query = ("SELECT `fixture_id` 
            FROM `fixtures`     
            WHERE `fixture_id` = $opponents_id") 
            or die (mysql_error());

您正在使用$opponents_id显示的var_dump变量是包含五个值的数组。因此,您需要使用IN子句并将其列出(就像您对$player_ids所做的那样):

$query = ("SELECT `fixture_id` 
            FROM `fixtures`     
            WHERE `fixture_id` IN (" . implode(",", $opponents_id) . ");") 
            or die (mysql_error());

注意:希望您了解mysql_*系列函数的累人主题。这些都被弃用并且不安全。我曾经写过这篇文章:http://www.jorble.com/2012/06/you-are-vulnerable-for-sql-injection/

答案 1 :(得分:1)

bodi0是对的,你的 $ opponents_id 是一个数组,如果它必须是一个数组,那么做一些这样的事情

$opponents_id_text=implode(',',$opponents_id);
$query = ("SELECT `fixture_id` 
                FROM `fixtures`     
                WHERE `fixture_id` in ($opponents_id_text)") 
                or die (mysql_error()); 

答案 2 :(得分:0)

问题在于您的第二个SQL查询:

WHERE `fixture_id` = $opponents_id" - 

此处$opponents_id是数组(当您从$_REQUEST为其分配值时,它会自动转换为数组,因为HTML组件select将选项作为数组发送)。 只需implode(),就像你对$player_ids所做的那样。

答案 3 :(得分:-1)

你没有在sql查询中正确指定数组。

当我们使用数组时,我们必须在查询中指定数组编号