【发布时间】:2015-10-07 13:12:59
【问题描述】:
代码
$dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );
$stmt = $dbh->prepare($query);
print_r($fullStmt);
if(!$stmt->execute($fullStmt))
{
print_r($stmt->errorInfo());
$full_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 (";
foreach($fullStmt as $val){ $full_query.= "'$val', "; }
$full_query = trim($full_query, ", ");
$full_query.= ");";
exit($full_query);
}
输出
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');
概述
$fullStmt 是一个值数组,我有一个查询如下:
$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 (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
但是,当尝试执行时,它返回FALSE。我输出结果查询,当直接将其插入 phpMyAdmin 时,它插入成功。
为什么我在phpMyAdmin的SQL字段中运行代码时插入没有问题,而在PHP中执行时却没有?
【问题讨论】:
-
您已准备好收到警告 - 您现在有
error_reporting(E_ALL);和display_errors吗?我很好奇errorInfo()是否真的在之前execute()被填充,在尝试prepare()以知道语句是否首先成功准备之后。在prepare()之后检查errorInfo()(或暂时打开ERRMODE_EXCEPTION,因此如果失败,代码永远不会超过prepare()) -
@MichaelBerkowski 打开提供的 PHP 错误:
PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: parameter was not defined指向execute()函数。目前还不清楚哪个参数没有被绑定,因为它在 phpMyAdmin 中工作正常,我找不到任何未绑定的参数? -
如果我记得,当使用
?占位符而不是命名占位符时,PDO 会自行丢弃execute()中的数组键,但如果不是这种情况,您也应该尝试execute(array_values($fullStmt))在绑定之前摆脱关联键。 -
那行得通 - 将其设置为答案,我会接受。干杯!
-
是的,我也刚刚对其进行了测试以发现这是 PDO 的行为。答案即将到来。