PHP 准备语句插入或更新如果行存在
PHP Prepared Statement insert or update If row exists
我一直在为下面的代码寻找修复程序。我在 Whosebug 中搜索了许多类似的 post,但没有解决。
我要确定的是,我想检查一个查询,如果行存在,我需要使用 UPDATE 语句,否则使用 INSERT 语句。我已经建立了很多次但没有准备好的声明。现在我正在使用准备好的语句修改我以前的许多代码。下面是我的代码。
<?php
include'../db.php';
$exercise_days=$_POST['edays'];
$id=$_POST['id'];
if ($exercise_days!='' && is_numeric($exercise_days))
{
$query=$db->prepare("SELECT * from exercisetable where id=?");
$query->bind_param('s', $id);
/* execute query */
$query->execute();
/* store result */
$query->store_result();
$query->bind_result($rowcheck);
$query->fetch();
if ($rowcheck)
{
$e_update=$db1->prepare("UPDATE exercisetable SET exercise_days=? WHERE id=?");
$e_update->bind_param('ss', $exercise_days, $id);
$e_update->execute();
if($e_update){
$message='Exercise Days Updated';
$success='Success';
echo json_encode(array('message'=>$message,'success'=>$success));
}
$e_update->close();
} else {
$e_insert=$db1->prepare("INSERT INTO exercisetable (`id`, `exercise_days`) VALUES (?,?)");
$e_insert->bind_param('ss', $id, $exercise_days);
$e_insert->execute();
if($e_insert){
$message='Exercise Days Inserted';
$success='Success';
echo json_encode(array('message'=>$message,'success'=>$success));
}
$e_insert->close();
}
}
else
{
$message='Exercise Days Can Only Be Numbers';
$success='Error';
echo json_encode(array('message'=>$message,'success'=>$success));
}
?>
执行上面的代码总是进入 else 语句,即使行存在,它也会进入 INSERT。我想要的是 UPDATE if row Exists 和 INSERT if else。任何帮助表示赞赏。
感谢@RamRaider 的提示和建议。我发布了对我有用的解决方案,以防万一有人需要即时参考。
在更改我的原始 PHP 代码之前对 MySql 列所做的一些编辑是我将我的列更改为 UNIQUE。
<?php
include'../db.php';
$exercise_days=$_POST['exercise_days'];
$id=$_POST['id'];
if ($exercise_days!='' && is_numeric($exercise_days))
{
$query=$db->prepare("INSERT INTO exercisetable (`id`, `exercise_days`) VALUES (?,?) ON DUPLICATE KEY UPDATE exercise_days =?");
$query->bind_param('sss', $id, $exercise_days, $exercise_days);
$query->execute();
if($query){
$message='Exercise Days Inserted';
$success='Success';
echo json_encode(array('message'=>$message,'success'=>$success));
}
$query->close();
}
else
{
$message='Excercise Days Can Only Be Numbers';
$success='Error';
echo json_encode(array('message'=>$message,'success'=>$success));
}
?>
我一直在为下面的代码寻找修复程序。我在 Whosebug 中搜索了许多类似的 post,但没有解决。
我要确定的是,我想检查一个查询,如果行存在,我需要使用 UPDATE 语句,否则使用 INSERT 语句。我已经建立了很多次但没有准备好的声明。现在我正在使用准备好的语句修改我以前的许多代码。下面是我的代码。
<?php
include'../db.php';
$exercise_days=$_POST['edays'];
$id=$_POST['id'];
if ($exercise_days!='' && is_numeric($exercise_days))
{
$query=$db->prepare("SELECT * from exercisetable where id=?");
$query->bind_param('s', $id);
/* execute query */
$query->execute();
/* store result */
$query->store_result();
$query->bind_result($rowcheck);
$query->fetch();
if ($rowcheck)
{
$e_update=$db1->prepare("UPDATE exercisetable SET exercise_days=? WHERE id=?");
$e_update->bind_param('ss', $exercise_days, $id);
$e_update->execute();
if($e_update){
$message='Exercise Days Updated';
$success='Success';
echo json_encode(array('message'=>$message,'success'=>$success));
}
$e_update->close();
} else {
$e_insert=$db1->prepare("INSERT INTO exercisetable (`id`, `exercise_days`) VALUES (?,?)");
$e_insert->bind_param('ss', $id, $exercise_days);
$e_insert->execute();
if($e_insert){
$message='Exercise Days Inserted';
$success='Success';
echo json_encode(array('message'=>$message,'success'=>$success));
}
$e_insert->close();
}
}
else
{
$message='Exercise Days Can Only Be Numbers';
$success='Error';
echo json_encode(array('message'=>$message,'success'=>$success));
}
?>
执行上面的代码总是进入 else 语句,即使行存在,它也会进入 INSERT。我想要的是 UPDATE if row Exists 和 INSERT if else。任何帮助表示赞赏。
感谢@RamRaider 的提示和建议。我发布了对我有用的解决方案,以防万一有人需要即时参考。
在更改我的原始 PHP 代码之前对 MySql 列所做的一些编辑是我将我的列更改为 UNIQUE。
<?php
include'../db.php';
$exercise_days=$_POST['exercise_days'];
$id=$_POST['id'];
if ($exercise_days!='' && is_numeric($exercise_days))
{
$query=$db->prepare("INSERT INTO exercisetable (`id`, `exercise_days`) VALUES (?,?) ON DUPLICATE KEY UPDATE exercise_days =?");
$query->bind_param('sss', $id, $exercise_days, $exercise_days);
$query->execute();
if($query){
$message='Exercise Days Inserted';
$success='Success';
echo json_encode(array('message'=>$message,'success'=>$success));
}
$query->close();
}
else
{
$message='Excercise Days Can Only Be Numbers';
$success='Error';
echo json_encode(array('message'=>$message,'success'=>$success));
}
?>