【问题标题】:PDO query with dynamic column names [duplicate]具有动态列名的 PDO 查询 [重复]
【发布时间】:2016-08-03 12:53:39
【问题描述】:

我正在将一个应用程序从 MySql 升级到 PDo,现在应用程序很大,所以我不想每次都编写查询,而是创建一些接受动态表名称的插入、更新、选择等函数列及其在数组中的值。

谁能告诉我如何创建这个。

到目前为止我所做的是

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

选择

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

对于插入器

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

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

我尝试做所有这些,但对于插入查询中的一个示例,我想将数组传递为

$col_val = array("column1"=>value, "column2"=>2);

这里的一些代码和函数使 PDO 查询变得容易并正确插入所有列和值。

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

正如您在此处看到的表格、列和值是完全动态的,它们将被传递给函数。

目前我正在使用所有奇怪的查询

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

提前谢谢你。

【问题讨论】:

  • 您正在学习 PDO,这很棒,但不要忘记使用它的第一个原因是 准备好的语句,您在这里完全避开了.如果您还没有阅读文档,read an introduction to using PDO effectively
  • @tadman 现在有什么网站可以让我学习这方面的准备声明。
  • 您可以尝试点击我放在那里的链接,或者阅读评论中关于阅读文档的部分。拜托,这并不难。

标签: php mysql mysqli pdo


【解决方案1】:

这不是一个完整的解决方案,但我认为您可以使用这个想法来更接近解决您的问题。

$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.");";

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

【讨论】:

  • 这不会正确地转义列名,所以它不适合这个任务。
  • 是的,我使用了这个,但它只解决了列,但是价值呢?正如 tadman 建议的准备声明一样。
  • 这越来越好,但仍然没有使用准备好的语句,所以这些值是按原样注入的,如果你有像O'Malley 这样的值,这是一个大问题。同样,需要对列数组进行转义,以便 order 这样的列名不会使语句无效。
  • @php-coder,当您遇到要在此处添加 O'Malley 的其他问题时,这是一个很好的问题和答案stackoverflow.com/questions/1742066/…
  • 下次我将为开发人员在尝试回答问题时可能遇到的每个问题准备一个教程。你觉得塔德曼怎么样?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-28
  • 2014-03-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多