gpt4 book ai didi

php - 将原始查询转换为准备好的语句

转载 作者:可可西里 更新时间:2023-11-01 07:08:26 25 4
gpt4 key购买 nike

假设我有 1995 年的时尚函数,用于向 mysql 发送查询。我对我的项目有很多查询,我正在寻找一个能够解析原始查询的函数/类(假设:SELECT foo from bar where pizza = 'hot' LIMIT 1)并用 php 创建一个准备好的语句。你有什么建议吗?这值得么?还是重写所有查询更好?

我的项目有 424 个查询,这只是 SELECT

谢谢你的帮助

最佳答案

试试这个:

function prepare1995Sql_EXAMPLE ($sqlString) {

# regex pattern
$patterns = array();
$patterns[0] = '/\'.*?\'/';

# best to use question marks for an easy example
$replacements = array();
$replacements[0] = '?';

# perform replace
$preparedSqlString = preg_replace($patterns, $replacements, $sqlString);

# grab parameter values
$pregMatchAllReturnValueHolder = preg_match_all($patterns[0], $sqlString, $grabbedParameterValues);
$parameterValues = $grabbedParameterValues[0];

# prepare command:
echo('$stmt = $pdo->prepare("' . $preparedSqlString . '");');
echo("\n");

# binding of parameters
$bindValueCtr = 1;
foreach($parameterValues as $key => $value) {
echo('$stmt->bindParam(' . $bindValueCtr . ", " . $value . ");");
echo("\n");
$bindValueCtr++;
}

# if you want to add the execute part, simply:
echo('$stmt->execute();');
}

# TEST!
$sqlString = "SELECT foo FROM bar WHERE name = 'foobar' or nickname = 'fbar'";
prepare1995Sql_EXAMPLE ($sqlString);

示例输出为:

$stmt = $pdo->prepare("SELECT foo FROM bar WHERE name = ? or nickname = ?");
$stmt->bindParam(1, 'foobar');
$stmt->bindParam(2, 'fbar');
$stmt->execute();

如果您的所有 sql 语句都与示例相似,条件是字符串,这可能会起作用。但是,一旦您需要等于整数,就必须更改模式。这是我现在能做的。我知道这根本不是最好的方法,但为了示例,试一试 :)

关于php - 将原始查询转换为准备好的语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7913589/

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