PHP函数创建动态SQL查询

PHP函数创建动态SQL查询,php,mysql,Php,Mysql,我有很多重复的代码来插入和选择MySQL数据库中的数据。出于好奇,是否可以创建一个PHP函数,将表、列和行作为参数并生成SQL语句。一个完全动态的SQL语句生成器,如果您愿意的话 例如: function PushData($table, $columns, $values) { // insert data } 此外,情况可能恰恰相反。可以选择和返回数据的函数 function PullData($table, $columns, $rowID) { // grab data

我有很多重复的代码来插入和选择MySQL数据库中的数据。出于好奇,是否可以创建一个PHP函数,将
作为参数并生成SQL语句。一个完全动态的SQL语句生成器,如果您愿意的话

例如:

function PushData($table, $columns, $values)
{
    // insert data
}
此外,情况可能恰恰相反。可以选择和返回数据的函数

function PullData($table, $columns, $rowID)
{
    // grab data
    return data;
}

这样的事情可能吗?如果是这样的话,这是值得做的事情吗?

试试这样的事情,我不确定它是否有效

function PushData($table, $columns, $values)
{
    $question_mark = count($columns)-1;
    $question_mark_array = array_fill(0, $question_mark, '?');

    $valueEscapedTrimed = array();

    foreach($values as $value)
    {
        $value=trim($value);
        $valueEscapedTrimed[] = htmlentities($value, ENT_QUOTES | ENT_HTML5, $encoding = 'UTF-8' );
    }

    $query = 'INSERT INTO '.$table. '(' .implode(' ',$columns). ') VALUES ('.implode(',',$question_mark_array).') \' ' ;

    foreach($valueEscapedTrimed as $value)
    {
        $stmt = $conn->prepare($query);
        $stmt->bindValue('?', $value);
        $stmt->execute();
        $stmt->CloseCursor();
        $stmt=null;
    }
}

为了防止有人像我一样好奇,我做了两个函数的工作示例。特别感谢Michael的回答,因为他给了我正确的方向

插入数据功能

function PushData($conn, $table, $columns, $values)
{
  $column_count = count($columns);
  $overwriteArr = array_fill(0, $column_count, '?');

  for ($i = 0; $i < sizeof($columns); $i++)
  {
    $columns[$i] = trim($columns[$i]);
    $columns[$i] = '`' . $columns[$i] . '`';
  }

  $query = "INSERT INTO {$table} (" . implode(',', $columns) . ") VALUES (" . implode(',', $overwriteArr) . ")";

  foreach ($values as $value)
  {
    $value = trim($value);
    $value = mysqli_real_escape_string($conn, $value);
    $value = htmlentities($value, ENT_QUOTES | ENT_HTML5, $encoding = 'UTF-8');
    $value = '"' . $value . '"';
    $query = preg_replace('/\?/', $value, $query, 1);
  }

  $result = mysqli_query($conn, $query);
  return $result;
}
function PullData($conn, $table, $columns, $operand_column, $operand_value)
{
  $columns = implode(',', $columns);
  $sql = "SELECT {$columns} FROM {$table} WHERE {$operand_column} = {$operand_value}";
  $result = mysqli_query($conn, $sql);
  return $result;
}

您可以在Zend中执行此操作。但我想这对于你所寻找的东西来说是极端的过分了。是的,这是可能的,我每天都在使用这样的函数。但是要小心sql注入!它被称为查询生成器。如果我错了,请纠正我,但是
$valueEscapedTrimed
是否超出范围,因此第二个foreach循环无法访问?我想我需要初始化数组。请参见编辑。