我正在尝试使用以下代码更新特定表:
页面顶部有
if(isset($_GET["id"])){
$id=$_GET["id"];.....
//Update Contact - 1
$array1 = array(
"Cn_First_Name"=>$ClientFirstNameMain,
"Cn_Last_Name"=>$ClientLastNameMain,
"Cn_Mobile"=>$ClientMobileMain,
"Cn_Email"=>$ClientEmailMain,
);
// Finally Inserting 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);
}
我收到以下错误:
致命错误:未捕获 mysqli_sql_exception:截断了不正确的 DECIMAL 值:xxxxx/UpdateClient.php:108 中的 ''
堆栈跟踪:
#0 xxxxx/UpdateClient.php(108): mysqli_stmt_execute(对象(mysqli_stmt))
#1 {main} 抛出在 xxxx/UpdateClient.php 第 108 行
我做错了什么? PS 如果重要的话我正在使用 PHP 8.2...
永远不要相信用户输入。 ;)
为了确保 $id 是 int 类型,你至少应该进行类型转换
$id = (int)$_GET['id'];
这将导致所有无法解析为 int 的用户输入的 $id 为 0。由于 SQL 中 ids 通常从 1 开始,因此您可以检查 $id 是否为 0,并且不执行该语句,而是返回错误。当然,如果 0 确实是一个有效的 id,这种方法就行不通。