Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php PDO查询未插入-HY093错误消息,但绑定变量数正确 代码 输出 概述_Php_Mysql_Pdo - Fatal编程技术网

Php PDO查询未插入-HY093错误消息,但绑定变量数正确 代码 输出 概述

Php PDO查询未插入-HY093错误消息,但绑定变量数正确 代码 输出 概述,php,mysql,pdo,Php,Mysql,Pdo,$fullStmt是一个值数组,我有一个查询,如下所示: Array ( [competition_code] => EN_PR [competition_id] => 8 [competition_name] => English Barclays Premier League [season_id] => 2013 [season_name] => Season 2013/2014 [timestamp] =>

$fullStmt
是一个值数组,我有一个查询,如下所示:

Array
(
    [competition_code] => EN_PR
    [competition_id] => 8
    [competition_name] => English Barclays Premier League
    [season_id] => 2013
    [season_name] => Season 2013/2014
    [timestamp] => 2013-10-30 09-03-49
    [uid] => g695281
    [last_modified] => 2013-10-15T12:35:58+00:00
    [matchday] => 1
    [period] => FullTime
    [matchwinner] => t7
    [date] => 2013-08-17 15:00:00 BST
    [team1] => t3
    [team1_halfscore] => 1
    [team1_score] => 1
    [team1_goals] => p44346/#/Goal
    [team1_side] => Home
    [team2] => t7
    [team2_halfscore] => 1
    [team2_score] => 3
    [team2_goals] => p54861/#/Goal//p83564/#/Goal//p54861/#/Penalty
    [team2_side] => Away
)
Array
(
    [0] => HY093
    [1] => 
    [2] => 
)
INSERT INTO `fixtures` (competition_code,competition_id,competition_name,season_id,season_name,
            timestamp,uid,last_modified,matchday,period,matchwinner,date,team1,team1_halfscore,team1_score,team1_goals,
            team1_side,team2,team2_halfscore,team2_score,team2_goals,team2_side) VALUES ('EN_PR', '8', 'English Barclays Premier League', '2013', 'Season 2013/2014', '2013-10-30 09-03-49', 'g695281', '2013-10-15T12:35:58+00:00', '1', 'FullTime', 't7', '2013-08-17 15:00:00 BST', 't3', '1', '1', 'p44346/#/Goal', 'Home', 't7', '1', '3', 'p54861/#/Goal//p83564/#/Goal//p54861/#/Penalty', 'Away');
但是,当尝试执行时,它返回
FALSE
。我输出结果查询,当直接将其插入phpMyAdmin时,它将成功插入


为什么当我在phpMyAdmin的SQL字段中运行代码时,而不是在PHP中执行时,它会毫无问题地插入?

在我自己测试之前,我不确定PDO中的这种行为,但是由于
$fullStmt
中的值数组是一个关联数组,PDO实际上正在尝试根据其数组键绑定命名参数。您最初准备的语句使用位置占位符
,因此命名参数不存在(并且不能与
混合)

因此,您需要消除PDO的数组键,以便将数组值与其位置占位符正确绑定。当数组被传递到
execute()
时,通过调用数组最容易做到这一点


请注意,PDO对数组顺序的正确解释取决于其值的顺序是否完全正确。无论以何种方式生成的
$fullStmt
数组的顺序都是正确的。但是,如果该过程发生更改,则去掉数组键可能会导致
INSERT
语句将值放入错误的列中。可能值得努力重构语句生成,以便在
值()
列表中使用命名参数,如
:competition\u code
,并继续使用关联数组来防止此潜在的触发点。

您设置了警告-您是否有
错误报告(E\u ALL)立即打开并显示错误
?我很好奇,在尝试
prepare()
以了解语句是否首先成功准备之后,是否在
execute()
之前填充了
errorInfo()
。在
prepare()
之后检查
errorInfo()
(或者暂时打开
ERRMODE\u异常
,这样如果失败,代码永远不会超过
prepare()
)@MichaelBerkowski打开提供的PHP错误:
PDOStatement::execute():SQLSTATE[HY093]:无效参数编号:未定义指向
execute()
函数的参数。现在还不清楚哪个参数没有绑定,因为它在phpMyAdmin中工作正常,我找不到任何未绑定的参数?如果我记得,当使用
占位符而不是命名占位符时,PDO会自动丢弃
execute()
中的数组键,但如果不是这样,您也应该尝试
执行(数组值($fullStmt))
在绑定之前去掉关联键。这很有效-将其设置为答案,我会接受。干杯!是的,我也测试了它,以发现这是PDO的行为。答案即将出现。实际上,如果此数组的顺序发生变化,即在HTML中移动一个字段,您可能会试图将数据放在错误的列中。我会建议t动态生成列列表和数据列表,这样以后就不会被发现。@riggsfully我同意这一评估。我将为此添加一个注释。@riggsfully在这种情况下,数据是从其他几个数组动态创建的-它们将始终按此顺序排列,无论值是填充的、空的还是空的,b但是你提出了一个很好的观点。@BenPearlKahan他们将永远按照这个顺序来讲述著名的溺水者的遗言。泰坦尼克号是不会沉没的。埃斯勒的工作是什么?修改代码???@BenPearlKahan没有侵略性,只是试图传递多年来被假设绊倒的经验。在改变之前的几天/几个月/几年呃,当时,就是宾在那里,做出了不正确的假设,付出了代价,双脚都被射过,不止一次。
Array
(
    [competition_code] => EN_PR
    [competition_id] => 8
    [competition_name] => English Barclays Premier League
    [season_id] => 2013
    [season_name] => Season 2013/2014
    [timestamp] => 2013-10-30 09-03-49
    [uid] => g695281
    [last_modified] => 2013-10-15T12:35:58+00:00
    [matchday] => 1
    [period] => FullTime
    [matchwinner] => t7
    [date] => 2013-08-17 15:00:00 BST
    [team1] => t3
    [team1_halfscore] => 1
    [team1_score] => 1
    [team1_goals] => p44346/#/Goal
    [team1_side] => Home
    [team2] => t7
    [team2_halfscore] => 1
    [team2_score] => 3
    [team2_goals] => p54861/#/Goal//p83564/#/Goal//p54861/#/Penalty
    [team2_side] => Away
)
Array
(
    [0] => HY093
    [1] => 
    [2] => 
)
INSERT INTO `fixtures` (competition_code,competition_id,competition_name,season_id,season_name,
            timestamp,uid,last_modified,matchday,period,matchwinner,date,team1,team1_halfscore,team1_score,team1_goals,
            team1_side,team2,team2_halfscore,team2_score,team2_goals,team2_side) VALUES ('EN_PR', '8', 'English Barclays Premier League', '2013', 'Season 2013/2014', '2013-10-30 09-03-49', 'g695281', '2013-10-15T12:35:58+00:00', '1', 'FullTime', 't7', '2013-08-17 15:00:00 BST', 't3', '1', '1', 'p44346/#/Goal', 'Home', 't7', '1', '3', 'p54861/#/Goal//p83564/#/Goal//p54861/#/Penalty', 'Away');
$query = "INSERT INTO `fixtures` (
                competition_code,
                competition_id,
                competition_name,
                season_id,
                season_name,
                timestamp,
                uid,
                last_modified,
                matchday,
                period,
                matchwinner,
                date,
                team1,
                team1_halfscore,
                team1_score,
                team1_goals,
                team1_side,
                team2,
                team2_halfscore,
                team2_score,
                team2_goals,
                team2_side
                ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
// Strip off the associative array keys...
if(!$stmt->execute(array_values($fullStmt))) {
   // etc
}