php - 使用面向对象的 php 在 mysqli 函数中更新查询

标签 php mysql mysqli

我正在使用面向对象的 php 和 mysqli。我在这个类中有类名 Database.php 我定义了一个函数名更新。 我做错了什么我认为这就是为什么它不能正常工作。当我用来运行单击更新时,数据会在表单中检索,但是当我尝试保存更新后的表单时,它总是只更新数据库的第一列。功能代码如下:

    public function update($tablename, $value, $where){
    $Update = " UPDATE ".$tablename." SET ";
    $array_keys = array_keys($value);
    $array_values= array_values($value);
    $count = count($array_keys);
    for($i=0; $i< $count; $i++){
        $value[$i] = " = '".$value[$array_keys[$i]]."' ";
    }
       //$value = implode(" ",$value);
    print_r($value);
  $Update .= " ".$value." WHERE ".$where;

    $Utest = $this->DbCon->query($Update);
    if($Utest){
        return true;
    }else{
        return false;
    }

这是我之前试过的php代码

if(isset($_POST['update'])){
    $id1 =  $_POST['id'];
    $name =  $_POST['name'];
    $city = $_POST['city'];
    $success=$DbQuery->update("record", array(" name " => $name ,"city" => $city)," id =".$id1);
    if($success){
       header("LOCATION:index.php");
    }else{
        echo "try again ";
    }

}

您对更新功能有什么好的建议,如何改进这个功能。实际上我是 PHP 面向对象的新手,所以建议我使用简单的方法。谢谢

最佳答案

问题是您试图将 $value 数组转换为 $Update 中的字符串 .= "".$value."WHERE ".$where;。你不能那样做。您必须在其上方的 for 循环中构造查询,而不是填充 $value 数组。无论哪种方式,您都不应该手动构建查询。您真的应该使用 PDO::prepare()$mysqli::prepare() 来防止漏洞。是的,如果您只是在学习,这可能感觉有些矫枉过正,但您应该从一开始就养成良好的习惯。

另外,修正你的格式。你的代码真的很难读。我建议通读 PSR standard (或任何广泛使用的 PHP 标准)并在您的代码中进行调整。再次强调,可能感觉有些矫枉过正,但早点开始是个好习惯。

这是一个 adapted version of your code让您轻松玩耍。如果在底部的 CLI 窗口中运行 php index.php,您可以看到问题。

关于php - 使用面向对象的 php 在 mysqli 函数中更新查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30685053/

相关文章:

php - 从数据库中获取要获取的数据大小

php - 将带有 URL 变量的超链接添加到数据表(jQuery)+搜索不起作用

php - 表单表 Bootstrap 中的 PHP 发布方法

mysql - 具有奇怪设置的多级 mysql 查询

php - 在 REST api 中验证 token

php - 从 URL 中去除撇号

python - 无法将 MySQLdb 导入到 python 中

PHP 和 MySQL 表单提交

php - mysqli 查询,里面有 mysql 函数

php - fatal error :调用未定义的方法 mysqli_stmt::get_result() in/<directoryA>/<directoryB>/public_html/PHP/functions/Users.php 第 18 行