MYSQL - 基于输入参数更新列的存储过程

时间:2016-10-31 16:16:16

标签: php mysql stored-procedures

我有一个简单的问题,

我有桌子:

| val | type | status |
|-----|------|--------|
|  90 |    1 |      a |

我希望有一个存储过程能够根据输入参数中给出的变量更新上表。

例如,也许在PHP中我有数组:

$data = ['val' => 80, 'status' => 'c']

我想将该数据发送到mysql存储过程,因此它知道它需要update val to 80 and status into 'c'

或其他例子:

$data = ['type' => 1, 'nothing' => NULL, 'status' => NULL, 'val' => 77]

然后它将update type to 1, status to null, val to 77 and ignore 'nothing'

* $ data输入,不应在存储过程中的输入参数中硬编码:D

这可以“简单地”完成吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

简单回答而不是存储过程:

<?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函数来处理你的DATA ARRAY并形成一个动态更新语句来更新所选数据的选择字段。

为什么不存储过程?

1)存储过程存储在MYSQL引擎

2)它无法处理DYNAMIC,VARIABLE LENGTH数据阵列SIMPLY。

仍然如何做程序风格:

查看Passing string to Mysql Procedure

Algorythem:

1)形成一个quamma seprated列表,如 - &gt;关键,值,键,值的帮助,如上面的PHP答案中使用的PHP;

2)以QCM作为参数调用过程;

3)编辑程序以更新字段(执行应答插入操作);

4)测试

使用php功能的优势:

1)它很简单。 2)它满足了制作存储程序的所有条款。 3)它也可以被ajax调用。

非常感谢。