我正在使用面向对象的 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/