Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.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语句在PHP中更易于更改_Php_Sql_Pdo - Fatal编程技术网

使大型SQL语句在PHP中更易于更改

使大型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 = ':

老实说,我正在构建的应用程序中有以下代码。。。当我想改变这样的事情时,感觉很痛苦。我一直在代码中遇到SQL的这个问题,但从未理解如何解决它。是否有某种方法或常规做法可以使这里的SQL更易于维护和更改?(我读过《不使用存储过程》一书)

使用此功能

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));