Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/230.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 提交警告时出错:PDOStatement::execute():SQLSTATE[HY093]_Php_Sql - Fatal编程技术网

Php 提交警告时出错:PDOStatement::execute():SQLSTATE[HY093]

Php 提交警告时出错:PDOStatement::execute():SQLSTATE[HY093],php,sql,Php,Sql,警告:PDOStatement::execute():SQLSTATE[HY093]:无效参数编号:绑定变量的数量与令牌的数量不匹配 早上好,我已经看了几个小时了,我只是找不到问题的任何帮助为什么我一直得到这个错误会有帮助 if(isset($\u POST['update'])) { $data=getPosts(); if(empty($data[0])| | empty($data[1])| | empty($data[2])| | empty($data[3])) { echo“输入要

警告:PDOStatement::execute():SQLSTATE[HY093]:无效参数编号:绑定变量的数量与令牌的数量不匹配

早上好,我已经看了几个小时了,我只是找不到问题的任何帮助为什么我一直得到这个错误会有帮助

if(isset($\u POST['update']))
{
$data=getPosts();
if(empty($data[0])| | empty($data[1])| | empty($data[2])| | empty($data[3]))
{
echo“输入要更新的玩家id号”;
}否则{
$updateStmt=$statement=$db->prepare('updateplayers SET Id_num=:idnum,Name=:Name,姓氏=:sunrame,Club=:Club WHERE Id_num=:idnum');
$updateStmt->执行(数组)(
':idnum'=>$data[0],
':name'=>$data[1],
“:姓氏”=>$data[2],
“:club'=>$data[3]
));
如果($updateStmt)
{
echo“播放器更新成功”;
}
}

}
如果有五个参数,则必须绑定5个值

在这种情况下,必须分配两次idNum

            $updateStmt->execute(array(
                        ':idnum' =>$data[0],
                         ':name' =>$data[1],
                         ':surname' =>$data[2],
                         ':club' =>$data[3],
                         ':idnum' =>$data[0]
            ));
为了进行测试,请尝试对idnum使用differnt param ref

    $updateStmt = $statement = $db->prepare('UPDATE players 
                SET Id_num = :idnum
                , Name = :name
                , Surname = :sunrame
                , Club = :club 
                WHERE Id_num = :idnum2');
    $updateStmt->execute(array(
                    ':idnum' =>$data[0],
                     ':name' =>$data[1],
                     ':surname' =>$data[2],
                     ':club' =>$data[3],
                     ':idnum2' =>$data[0]
        ));

谢谢你的回答。我发现了问题

如果(empty($data[0])| |不应该出现在那里,那么它现在可以正常工作了

请参阅下面的代码

if(isset($\u POST['update']))
{
$data=getPosts();
if(空($data[1])| |空($data[2])| |空($data[3]))
{
echo“输入要更新的玩家id号”;
}否则{
$updateStmt=$statement=$db->prepare('UPDATE players SET Name=:Name,姓氏=:Name,Club=:Club WHERE Id_Num=:idnum');
$updateStmt->执行(数组)(
':idnum'=>$data[0],
':name'=>$data[1],
“:姓氏”=>$data[2],
“:club'=>$data[3],
));
如果($updateStmt)
{
echo“播放器更新成功”;
}
}

}
为什么要将Id\u num列设置为与以前相同的值?如果Id发生更改,可以说在最初捕获数据时出错。但是您有:idnum作为set参数和WHERE参数。在我看来,您似乎希望将Id\u num设置为与以前相同的值。如果要设置为其他值,为什么不设置:old\u idnum和:new_idnum?不确定这是否是问题所在,但您的查询引用了
:sunrame
,并且您将
:姓氏
作为参数传递。我只使用一个建议更新了答案。但此建议最好使用部分检查,因为您的错误应该由我的答案解决。出现了相同的错误。我删除了空($data[0])| |在一步一步返回并解决它之后。感谢您的输入。