【问题标题】:Creating Generic Update Function Using PHP & MySql使用 PHP 和 MySql 创建通用更新函数
【发布时间】:2014-04-11 17:42:25
【问题描述】:

我正在尝试使用 PHP 和 MySQL "PDO" Connection" 制作一个适用于任何数据库的更新函数,但它不起作用.. 这是代码

<?php
require_once "PDO-Connection.php";
function update ($table, $data, $id, $pdo)
{
    foreach($data as $column => $value)
    {
    $sql = "UPDATE {$table} SET ({$column}) VALUE (:{$column}) 
    WHERE (ID) = (:{$id});
    $stmt = $pdo->prepare($sql);
    $stmt->execute(array(':'.$column => $value));
    }
}
?>

调用这个函数

update("accounts", array("fname" => "ahmed90"), 1, $pdo);

我有 (accounts) 表和 (fname, ID) 字段

提前致谢

【问题讨论】:

  • update("accounts", array("fname" =&gt; "ahmed90"), 1, $pdo); $pdo 有什么?它是在哪里定义的?
  • 在名为“PDO-Connection.php”的单独 PHP 页面中定义并在此页面中调用
  • 您必须在 发布您的问题之前修复代码中的拼写错误和 PHP 错误
  • 之后你必须学习正确的SQL语法并尝试它是否可以在没有任何功能的情况下工作
  • 之后你必须学习 PDO 语法

标签: php mysql pdo


【解决方案1】:

您在 UPDATE 中编写的 SQL 代码不正确。应该是:

foreach($data as $column => $value)
    {
    $stmt = $pdo->prepare(" update $table set $column = ? where $id = ? ");
    $stmt->execute(array($column, $id);
    }

作为旁注,我认为您确实不需要创建function 来更新数据库表行。您将来执行的每次更新都可能有一组preconditions,或者可能需要additional computation,这意味着您不能在每种情况下都使用update 函数。此外,如果您有不止一列要更新,$data 数组将有多个条目,并且foreach 循环运行不止一次。这意味着在同一行上多次执行 SQL 更新,这可能意味着性能下降。

【讨论】:

  • +1。在我看来,这回答了这个问题,尽管我不会在 SQL 文本中包含不需要的括号,即 = :value= :id
  • 你已经在你的回答中解释了自己的反对意见
  • 我说过会吗?我告诉 OP 他哪里出错了,并表示没有使用这样的功能,并建议它会进一步导致性能下降。再看一遍我的答案。
  • 我确信在我的解决方案的帮助下,OP 已经学会了如何使用准备好的语句、发送参数并执行它们。我也很确定他不需要学习这样的功能。如果不是这个解决方案,OP 可能不会知道这些事情。您对该解决方案的否决可能只会误导和阻止 OP 遵循它。总体而言,您似乎没有做任何事情来帮助这里的任何人,这很糟糕。你不应该对我无礼。
  • 尽量保持礼貌,改变你说话的方式。你几乎没有这样做。
【解决方案2】:

您可以将更新创建为:

    <?php
include 'connection.php';
function dbupdate($table, $data, $id)
{
    global $link;
    $setColumn= array();


    foreach ($data as $key => $value)
    {
        $setColumn[] = "{$key} = '{$value}'";

    }

   $sql = "UPDATE {$table} SET ".implode(', ', $setColumn)." WHERE ID = '$id'";
    mysqli_query($link,$sql);

}
?>

【讨论】:

  • 你的答案应该包含对你的代码的解释和它如何解决问题的描述。
【解决方案3】:

这个功能很好用:

<?php
require_once "PDO-Connection.php";

function update ($table, $data, $id, $pdo)
{
    $setPart = array();
    $bindings = array();

    foreach ($data as $key => $value)
    {
        $setPart[] = "{$key} = :{$key}";
        $bindings[":{$key}"] = $value;
    }

    $bindings[":id"] = $id;

    $sql = "UPDATE {$table} SET ".implode(', ', $setPart)." WHERE ID = :id";
    $stmt = $pdo->prepare($sql);
    $stmt->execute($bindings);
}
?>

看看'PHP Sandbox'

【讨论】:

  • 检查你的 sql 语法
猜你喜欢
  • 2010-10-12
  • 1970-01-01
  • 1970-01-01
  • 2013-08-30
  • 2016-08-07
  • 2019-12-31
  • 2013-08-27
  • 2021-04-14
  • 2019-11-29
相关资源
最近更新 更多