Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.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
Php 具有动态列名的PDO查询_Php_Mysql_Mysqli_Pdo - Fatal编程技术网

Php 具有动态列名的PDO查询

Php 具有动态列名的PDO查询,php,mysql,mysqli,pdo,Php,Mysql,Mysqli,Pdo,我正在将一个应用程序从MySql升级到PDo,现在这个应用程序很大,所以我不想每次都写查询,而是创建一些insert、update、select等函数,这些函数接受动态表名,列及其值在数组中 有谁能建议我如何创造这个 到目前为止,我所做的是 $connection = new PDO("mysql:host=$host;dbname=$database;charset=utf8", "$user", "$password"); 选择 $field = array("column1","colu

我正在将一个应用程序从MySql升级到PDo,现在这个应用程序很大,所以我不想每次都写查询,而是创建一些insert、update、select等函数,这些函数接受动态表名,列及其值在数组中

有谁能建议我如何创造这个

到目前为止,我所做的是

$connection = new PDO("mysql:host=$host;dbname=$database;charset=utf8", "$user", "$password");
选择

$field = array("column1","column2");
$sql = "SELECT ".$fields." FROM ".$table." ".$whereSQL." ";
为inser设计

$col_val = array("column1"=>value, "column2"=>2);
$query = "insert into ".$table." (".$fields.") values (".$values.")";

$query = $connection->prepare($sql);
$query->execute();
我尝试做所有这些,但对于insert查询中的一个示例,我希望将数组作为

$col_val = array("column1"=>value, "column2"=>2);
这里的一些代码和函数使PDO查询变得简单,并正确插入所有列和值

我也在寻找同样的方法来执行更新查询

正如您在这里看到的tabel,列和值是完全动态的,将传递给函数

目前,我正在使用所有奇数查询

$query = $connection->prepare($sql);
$query->execute();

提前感谢您。

这不是一个完整的解决方案,但我认为您可以利用这一想法进一步解决您的问题


在执行查询之前,您可以使用PDO对字符串($query)进行转义,以避免SQL注入

您正在学习PDO,这很好,但不要忘记使用它的第一个原因是预处理语句,这完全是在回避。如果您还没有阅读文档,@tadman do youk现在有任何我可以学习此准备状态的网站。您可以尝试单击我放在那里的链接,或者阅读有关阅读文档的评论中的部分。拜托,这并不难。这不会正确地转义列名,所以它不适合这个任务。是的,我用了这个,但它只解决了列,但值呢,正如塔德曼建议的准备语句。这越来越好,但仍然没有使用准备好的语句,所以这些值正在按原样注入,如果你有一个像
O'Malley
这样的值,这是一个很大的问题。同样,需要对列数组进行转义,以便像
order
这样的列名不会使语句无效。@php coder,当你谈到另一个问题,你想添加O'Malley,这里有一个很好的问题和答案,下次我将为开发者在回答问题时可能遇到的每个问题准备一个教程。你觉得塔德曼怎么样?
$columns = array('column1', 'column2', 'column3')

$comma_separated = implode(",", $columns);

$columns_values = array(
    'column1' => 'text1',
    'column2' => 'text2',
    'column3' => 'text3',
    )

$values_query = "";
$index = 0

foreach ($columns as $column_name) {

    if ($index == 0){
        $values_query .= "'". $columns_values[$column_name]."'"
    }else{
        $values_query .= ", '". $columns_values[$column_name]
    }

}


$query = "INSERT INTO table (". $comma_separated . ") VALUES (".$values_query.");";