gpt4 book ai didi

php - 重构以循环 mySQL 和 PHP 代码

转载 作者:行者123 更新时间:2023-11-29 20:27:24 25 4
gpt4 key购买 nike

我目前有一个名为 fields 的关联数组,它存储 HTML 输入字段中的所有 $_POST 变量。当我尝试将值绑定(bind)到 mySQL 数据库时,将使用关联数组变量。以同样的方式,我也将相同的名称用作 mySQL 数据库的列标题。所以这是非常乏味和漫长的。有没有办法可以循环遍历列并用另一个循环为关联数组分配一个值?请检查下面的示例,并提前感谢您的帮助。

     try {
$insertSql = "INSERT INTO tableExample";
$sqlCols = " (
a,
b,
c,
d,
e,
f,
g,
h,
i,
j,
k,
l,
m,
n,
o,
p,
q,
r,
s,
t,
u,
v,
w,
x
)";
$result = $db->prepare($insertSql . $sqlCols . " VALUES (
?,
?,
?,
?,
?,
?,
?,
?,
?,
?,
?,
?,
?,
?,
?,
?,
?,
?,
?,
?,
?,
?,
?,
?)");
$result->bindValue(1,$fields['a'],PDO::PARAM_STR);
$result->bindValue(2,$fields['b'],PDO::PARAM_STR);
$result->bindValue(3,$fields['c'],PDO::PARAM_STR);
$result->bindValue(4,$fields['d'],PDO::PARAM_STR);
$result->bindValue(5,$fields['e'],PDO::PARAM_STR);
$result->bindValue(6,$fields['f'],PDO::PARAM_STR);
$result->bindValue(7,$fields['g'],PDO::PARAM_STR);
$result->bindValue(8,$fields['h'],PDO::PARAM_STR);
$result->bindValue(9,$fields['i'],PDO::PARAM_STR);
$result->bindValue(10,$fields['j'],PDO::PARAM_STR);
$result->bindValue(11,$fields['k'],PDO::PARAM_STR);
$result->bindValue(12,$fields['l'],PDO::PARAM_STR);
$result->bindValue(13,$fields['m'],PDO::PARAM_STR);
$result->bindValue(14,$fields['n'],PDO::PARAM_STR);
$result->bindValue(15,$fields['o'],PDO::PARAM_STR);
$result->bindValue(16,$fields['p'],PDO::PARAM_STR);
$result->bindValue(17,$fields['q'],PDO::PARAM_STR);
$result->bindValue(18,$fields['r'],PDO::PARAM_STR);
$result->bindValue(19,$fields['s'],PDO::PARAM_STR);
$result->bindValue(20,$fields['t'],PDO::PARAM_STR);
$result->bindValue(21,$fields['u'],PDO::PARAM_STR);
$result->bindValue(22,$fields['v'],PDO::PARAM_STR);
$result->bindValue(23,$fields['w'],PDO::PARAM_STR);
$result->bindValue(24,$fields['x'],PDO::PARAM_STR);
$result->execute();
} catch (Exception $e) {
echo "Unable to store data";
echo $e->getMessage();
exit;
}

最佳答案

快速想出一个可能的解决方案。在尝试之前,请记住它未经测试,并且这里可能存在一些语法错误(我这边没有 PDO...实际上,也没有 php)。

它的作用是定义两个单独的映射:一个用于“数据库列到索引”,另一个用于“数据库列到值”。

我不能确定这是否能解决您的问题,但这是一个起点。

<?php
try
{
//Define your columns and indexes...
$fields=['col_a' => 1, 'col_b' => 2, 'col_c' => 3, 'col_d' => 4];

//Let this be your post data. Notice how the index are the same as above.
$data=['col_a' => "Value a", "col_b" => 33, "col_c" => "Value C", "col_d" => 12];

//Prepare the statement....
$sqlCols=null;
$sqlValues=null;

foreach($fields as $key => $value)
{
$sqlCols.=$key.',';
$sqlValues.='?,';
}

$result = $db->prepare("INSERT INTO tableExample (".substr($sqlCols, 0, -1).") VALUES (".substr($sqlValues, 0, -1).")";

//Bind the values... Please, make sure the order of parameters is correct!.
foreach($fields as $key => $index)
{
$result->bindValue($index, $data[$key], PDO::PARAM_STR);
}

$result->execute();
}
catch (Exception $e)
{
echo "Unable to store data";
echo $e->getMessage();
}
?>

我再次声明,您正在通过帖子变量中的名称公开数据库结构。我怀疑这就是您想要做的。

关于php - 重构以循环 mySQL 和 PHP 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39226086/

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