Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 将插入序列转换为更新序列_Sql_Pdo_Syntax_Insert_Sequence - Fatal编程技术网

Sql 将插入序列转换为更新序列

Sql 将插入序列转换为更新序列,sql,pdo,syntax,insert,sequence,Sql,Pdo,Syntax,Insert,Sequence,我在PDO中有一个SQL插入序列,如: INSERT INTO property (id,name,addres...) VALUES (:id,:name,:address...) 我想用相同的字段做一个更新序列。问题是我有150个字段和大约3或4个不同的序列,所以如果我手动生成更新语法,可能会花费很多时间和很多错误,有没有“自动”转换的方法 非常感谢我这样做的方法是使用一个函数,该函数根据数组中传递的键值对动态构建查询: function updateTable($table, $valu

我在PDO中有一个SQL插入序列,如:

INSERT INTO property (id,name,addres...) VALUES (:id,:name,:address...)
我想用相同的字段做一个更新序列。问题是我有150个字段和大约3或4个不同的序列,所以如果我手动生成更新语法,可能会花费很多时间和很多错误,有没有“自动”转换的方法


非常感谢

我这样做的方法是使用一个函数,该函数根据数组中传递的键值对动态构建查询:

function updateTable($table, $values) 
{
    // Set the base query
    $query = 'UPDATE ' . $table;

    // Build the query with the key value pairs
    foreach($values as $key=>$data) {
        $query . ' SET ' . $key . ' = ' . $data . ' ';
    }

    // Execute your query here
    ...
}
显然,您需要在循环的每次迭代中绑定PDO对象,但我想给您一个循环的基本布局来处理您想要实现的内容,然后您可以这样调用它:

updateTable('Products', { 'product_name' => 'Apple', 'product_price' => 100.00})
然后,这将生成查询:

UPDATE Products SET product_name = 'Apple', product_price = 100.00
您可以轻松地扩展此查询,以提供
WHERE
参数,以便优化您的更新查询-请记住,此查询当前处于安全状态,因此请在提交到DB之前花一些时间对变量执行适当的清理


希望这有帮助。

您可以使用Excel(或其他电子表格)作为代码生成器。您有150列吗?你确定不能改进你的表结构来避免这种情况吗?这是一个房地产数据库,它包含很多关于属性的不同信息……啊,我明白了,听起来很混乱!:(-老实说,这是一个痛苦的过程,但我担心您可能需要手动编写(我猜您正在编写一些过程?)请允许我问一下,为什么您需要更新每个查询中的每个字段?当然,您只需要在某些字段发生更改时更新它们,因此您的查询只需要在需要的时间内更新即可。Anks:D这是我一直在寻找的问题-如果您在扩展
WHERE
功能时遇到问题,请告诉我-我的计算机不在家r、 在我的手机上很难回答的问题:P-祝你好运!请记住,如果没有WHERE子句,表中的所有记录都将更新;)