php 尝试使用准备好的语句进行UPDATE时,截断了不正确的DECIMAL值

zf9nrax1  于 2023-09-29  发布在  PHP
关注(0)|答案(1)|浏览(100)

我正在尝试使用以下代码更新特定的表:

if(isset($_GET["id"])){
$id = (int)$_GET['id'];
      
//Checking for expected id    
if ($id!="" AND $id!=0){
    
    //Update Contact1
    $array1 = array(
              "Cn_First_Name"=>$ClientFirstNameMain,
              "Cn_Last_Name"=>$ClientLastNameMain,
              "Cn_Mobile"=>$ClientMobileMain,
              "Cn_Email"=>$ClientEmailMain,
            );
                
    // Finally Inserting Array Data in Table
    $QUpdateContact1Pr = "UPDATE `TB_Contacts` SET ";
    foreach($array1 as $key=>$value) {
        $QUpdateContact1Pr .="`".$key."`= ? , "; 
    }
    $QUpdateContact1Pr = trim($QUpdateContact1Pr, ' ');
    $QUpdateContact1Pr = trim($QUpdateContact1Pr, ',');
    $QUpdateContact1Pr.= " WHERE `Con_ClientID`= ? AND `Con_Priority`='1'";
                
    if($stmt2 = mysqli_prepare($LocalDbConn, $QUpdateContact1Pr)){
        mysqli_stmt_bind_param($stmt2,'ssssi',$ClientFirstNameMain,$ClientLastNameMain,$ClientMobileMain,$ClientEmailMain,$id);
        $UpdatedContact1=mysqli_stmt_execute($stmt2);
    } 
}else{
    //Return to Index Screen
    header('location:Index.php');
}
}else{
    //Return to Index Screen
    header('location:Index.php');
}

我得到了以下错误:
致命错误:未捕获的mysqli_sql_exception:截断的不正确DECIMAL值:“”在xxxxx/UpdateClient.php:108
堆栈跟踪:
#0 xxxxx/UpdateClient.php(108):mysqli_stmt_execute(Object(mysqli_stmt))
#1 {main} thrown in xxxx/UpdateClient.php on line 108
我做错了什么 *PS我使用PHP 8.2如果它是重要的... *

eimct9ow

eimct9ow1#

永远不要相信用户输入。;)
要确保$id是int类型,至少应该进行类型转换

$id = (int)$_GET['id'];

这将导致所有不能解析为int的用户输入的$id为0。由于在SQL中,id通常从1开始,因此您可以检查$id是否为0,并且不执行该语句,而是返回一个错误。当然,如果0确实是一个有效的id,这种方法就不起作用了。

相关问题