使大型SQL语句在PHP中更易于更改
老实说,我正在构建的应用程序中有以下代码。。。当我想改变这样的事情时,感觉很痛苦。我一直在代码中遇到SQL的这个问题,但从未理解如何解决它。是否有某种方法或常规做法可以使这里的SQL更易于维护和更改?(我读过《不使用存储过程》一书) 使用此功能使大型SQL语句在PHP中更易于更改,php,sql,pdo,Php,Sql,Pdo,老实说,我正在构建的应用程序中有以下代码。。。当我想改变这样的事情时,感觉很痛苦。我一直在代码中遇到SQL的这个问题,但从未理解如何解决它。是否有某种方法或常规做法可以使这里的SQL更易于维护和更改?(我读过《不使用存储过程》一书) 使用此功能 function pdo_insert($con, $table, $data_arr) { if (!is_array($data_arr) || !count($data_arr)) return false; $bind = ':
function pdo_insert($con, $table, $data_arr)
{
if (!is_array($data_arr) || !count($data_arr)) return false;
$bind = ':'.implode(',:', array_keys($data_arr));
$sql = 'INSERT into '.$table.'('.implode(',', array_keys($data_arr)).') '.
'values ('.$bind.')';
$stmt = $con->prepare($sql);
$status = $stmt->execute(array_combine(explode(',',$bind), array_values($data_arr)));
if($status)
{
// success
$msg = 'Data added to database successfully';
return $msg;
}
else
{
// failure
$msg = 'Error in adding data into database';
return $msg;
}
}
调用函数
$msg = pdo_insert($db, 'table name here', $_POST);
// see the result
echo $msg;
您在哪里读到不使用存储过程 它们是问题的解决方案,当查询变得复杂时,最好将逻辑移到一个存储过程并执行它(例如
调用sp\u isnert\u user?,?
)
它们还允许您在不涉及代码的情况下维护/修改SQL逻辑。更简单,这是什么意思?您想让添加到数组中的更多项自动生成到SQL查询中吗?顺便说一下,您不需要在每一行上加引号和连接。PHP支持多行字符串-只需在第一行打开双引号,然后根据需要添加新行,并在末尾关闭双引号即可。@AleksG哦,好的,谢谢-这是一个好的开始。事实上,我可能只是在抱怨什么。如果没有连接,它实际上并不那么糟糕
$msg = pdo_insert($db, 'table name here', $_POST);
// see the result
echo $msg;
function generateSQL($table, $arr) {
$sql = "INSERT INTO ".$table . " (";
foreach($arr as $k => $v) {
$sql .= "`".substr_replace($k, "", 0, 1)."`, ";
}
$sql = substr_replace($sql, "", -2);
$sql .= ") VALUES (";
foreach($arr as $k => $v) {
$sql .= $k.", ";
}
$sql = substr_replace($sql, "", -2);
$sql .= ") ON DUPLICATE KEY UPDATE ";
foreach($arr as $k => $v) {
$sql .= "`".substr_replace($k, "", 0, 1)."` = VALUES(`".substr_replace($k, "", 0, 1)."`), ";
}
$sql = substr_replace($sql, "", -2);
return $sql;
}
print_r(generateSQL("user", $stmt_arr));