gpt4 book ai didi

PHP 在现有查询中动态添加新列和值

转载 作者:行者123 更新时间:2023-11-29 03:15:50 24 4
gpt4 key购买 nike

我的应用程序执行如下 INSERT 查询:

INSERT INTO table (`col1`, `col2`, `col3`) VALUES ('oneVal', 'twoVal', 'threeVal')

现在我想重建我的应用程序,以便它始终使用特定 ID 进行选择、插入、删除和更新。假设唯一 ID 称为:companyId

我不想手动重写我的所有查询,所以我尝试编写一个函数,用 PHP 重写现有的 SQL 查询,以便它将 companyId 包含在查询中。 p>

如果 companyId 为“1”(companyId 并不总是“1”!),期望的结果:

INSERT INTO table (`col1`, `col2`, `col3`, `companyId`) VALUES ('oneVal', 'twoVal', 'threeVal', '1')

我的问题是:

  1. 在 PHP 中有什么方法可以动态重写查询它会包括 companyId 列和匹配的 id 值吗?
  2. 有更好的方法吗?就像一些技巧设置 MySQL服务器总是使用额外的值(在这种情况下 companyId='1'

我已经通过搜索字符串尝试了选项 (1)

) VALUES

找到该字符串后,我在 ) 之前添加 companyId。现在到查询的末尾,获取最正确的 ) 并在其之前添加值。

但这是否适用于一般情况?我认为可能有更好的方法来解决这个问题。

在此先感谢社区!

EDIT 1 更多说明目前我已经构建了一个函数来修改我的 SELECT 语句。函数代码:

//If current query = SELECT query
if (containsString($sql, 'select')) {
//Check if contains WHERE
if (containsString($sql, 'where')) {
//Yes
//Add companyId after WHERE
$sql = substr_replace($sql, '(companyId=?) AND ', strpos($sql, 'WHERE') + 6, 0);
//Explanation:
//SELECT * FROM table WHERE deleted='No'; becomes -->
//SELECT * FROM table WHERE (companyId=?) AND deleted='No';
}else{
//No
//Get table , and after that INSERT WHERE companyId=?
$tableName = explode(' from ', strtolower($sql))[1]; //Get part AFTER 'from'
//First word after $tableName = tablename
$tableName = explode(' ', $tableName)[0]; //First word after 'from' = tablename
$sql = substr_replace($sql, 'WHERE (companyId=?) ', strpos($sql, $tableName) + strlen($tableName) + 1, 0);
//Explanation:
//SELECT * FROM table ORDER BY id; becomes -->
//SELECT * FROM table WHERE (companyId=?) ORDER BY id;
}
}

因此这段代码动态地为查询语句添加了一个额外的条件。这也可以通过 DELETEUPDATE 语句轻松实现(与 SELECT 相同)但我正在尝试为 INSERT INTO 查询提出类似的建议。如何使用新的 companyId 修改原始查询?

最佳答案

我想如果你有一个包含列名和值的关联数组,那么你也可以很容易地让它在未来变得更加动态。假设您有一个列名数组及其值,例如

$data = ['col1'=>'val1','col2'=>'val2','col3'=>'val3','companyId'=>1];

$query = "INSERT INTO `yourtable` ( ".implode(' , ', array_keys($data)).") VALUES ('".implode("' , '", array_values($data))."')";
echo $query;

演示: https://3v4l.org/udt1i

然后您可以使用 regex 替换方式全局将列和值添加到所有 100 个查询中。

<?php
$re = '/\) VALUES (.+?(?=\)))/m';
$str = 'INSERT INTO table (`col1`, `col2`, `col3`) VALUES (\'oneVal\', \'twoVal\', \'threeVal\')';
$subst = ',`col4`) VALUES $1 , \'1\'';
$result = preg_replace($re, $subst, $str);
echo $result;
?>

演示:https://3v4l.org/rOQDG

关于PHP 在现有查询中动态添加新列和值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56998928/

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