我有一个简单的问题
我有 table :
| val | type | status |
|-----|------|--------|
| 90 | 1 | a |
我想要一个存储过程,能够根据输入参数中给出的变量更新上面的表。
例如,也许在 PHP 中我有数组:
$data = ['val' => 80, 'status' => 'c']
我想将该数据发送到 mysql 存储过程,因此它知道需要将 val 更新为 80,将状态更新为“c”
或者另一个例子:
$data = ['type' => 1, 'nothing' => NULL, 'status' => NULL, 'val' => 77]
然后它将将类型更新为 1,将状态更新为 null,将 val 更新为 77 并忽略“无”
*$data 输入,不应硬编码在存储过程的输入参数中:D
这可以“简单地”完成吗?
谢谢!
最佳答案
比存储过程简单答案:
<?php
$data = ['val' => 80, 'status' => 'c'];
function auto($x){
$field_string ='';
$input_string='';
foreach ($x as $userInfo=>$userInfo_value){
if($userInfo_value !=''){
echo $userInfo."->".$userInfo_value;
if ($field_string == '') {
$field_string = $field_string.$userInfo.' = '.$userInfo_value;
}
else {
$field_string = ','.$field_string.'='.$userInfo_value;
}
}
}
$sql = "UPDATE protocole_test SET ".$field_string."WHERE (condition not specified in question) ";
echo $sql ; //check query formed add a execution line after this
}
auto($data);
?>
说明:
这里我们创建一个 PHP 函数来处理您的数据数组并形成动态更新语句以使用所选数据更新所选字段。
为什么不使用存储过程?
1)存储过程存储在MYSQL引擎中
2) 它无法简单地处理动态、可变长度数据数组。
仍然如何做程序风格:
查看Passing string to Mysql Procedure .
算法:
1)在 php 的帮助下形成一个 quamma 分隔列表,如 -> key,value,key,value,如上面的 php 答案中所使用的;
2) 以 QCM 作为参数调用过程;
3)编辑程序更新字段(在答案中执行插入操作);
4)测试。
使用php函数的优点:
1) 很简单。 2)它满足了创建存储过程的所有目的。 3)也可以通过ajax调用。
非常感谢。
关于php - MYSQL - 根据输入参数更新列的存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40346207/