gpt4 book ai didi

php - 调用存储过程以带参数更新表 PHP MySQL

转载 作者:行者123 更新时间:2023-11-29 12:57:23 27 4
gpt4 key购买 nike

使用参数调用 SELECT 语句非常棒,并且使生活编码变得如此整洁。当我想使用 UPDATE 语句更新数据库中的数据时,我的问题就出现了。

我有包含 UPDATE 语句的存储过程,类似于下面的

CREATE DEFINER = 'myuser'@'%'
PROCEDURE sp_upd_planning (
IN prop_id int(11),
IN planned_date varchar(15),
IN time_slot int(11),
IN by_who int(11),
IN cost decimal(15,2),
IN complete_date varchar(15),
IN lastupd_user varchar(100))
BEGIN
UPDATE planning
SET
Status = CASE
WHEN CompleteDate IS NOT NULL THEN 4
WHEN PlannedDate IS NULL THEN 2
WHEN PlannedDate IS NULL AND CompleteDate IS NULL THEN 3
END
,PlannedDate = planned_date
,BookingDate = NOW()
,TimeSlot = time_slot
,ByWho = by_who
,Cost = epc_cost
,Complete = CASE WHEN CompleteDate IS NOT NULL THEN 1 ELSE 0 END
,CompleteDate = complete_date
,LastUpdateDate = NOW()
,LastUpdateUser = lastupd_user
WHERE PropID = prop_id;
END

当我运行 CALL sp_upd_planning(paramters here); 时,该语句可以正常工作;在数据库中。

我使用表单提交,我已将相关字段发布到变量中,在我的连接中,我再次调用存储过程,就像以前在数据库中一样,我使用变量来匹配所需的参数,如下所示(是的,我知道它正在使用 mysql_,但我想快速测试,所以我使用了这个)

mysql_query("CALL sp_upd_planning('$planned', '$timeslot', '$bywho', '$cost', '$completed', '$inputby', $propid)") or die(mysql_error());

当代码执行时,一切看起来都很好,没有错误,主表单按照我设置的 jquery 提交,但是当我检查数据库时,没有任何更新。

为什么会这样?

最佳答案

听起来您没有执行您的语句。在 PHP 中,您仍然需要在创建后执行该语句。另外,如果我没记错的话,绑定(bind)参数而不是在字符串中传递参数会更安全。尝试这样的事情:

$conn = new mysqli("mysql:host=$host;dbname=$dbname", $username, $password);
// execute the stored procedure
$sql = "CALL sp_upd_planning(:planned, :timeslot, :bywho, :cost, :completed, :inputby, :propid)";
$stmt = $conn->prepare($sql);

$stmt->bindParam('datatypes', $planned, $timeslot, $bywho, $cost, $completed, $inputby, $propid);
$stmt->execute();

基本上,通过术语数据类型,我们假设planned是一个字符串,timeslot是一个日期/时间,bywho是一个字符串,cost是一个int,completed是一个int,inputby是一个string,propid是一个int,那么它会说“sdsiisi”

关于php - 调用存储过程以带参数更新表 PHP MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23831931/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com