gpt4 book ai didi

php - PDO : creating a reusable code

转载 作者:行者123 更新时间:2023-11-29 06:28:09 27 4
gpt4 key购买 nike

我正在尝试在 PDO 中创建可重用的代码。

这是我的代码。

$myClass = new main_c();
$condition = "email_address = :email_address AND password = :password";
$array = array('email_address' => 'yiihii@yahoo.com', 'password' => '98467a817e2ff8c8377c1bf085da7138');
$row = $myClass->get('user', $condition, $array, $db);
print_r($row);

这是我的函数。

      public function get($tablename, $condition, $array, $db){

$stmt = $db->prepare("SELECT * FROM $tablename WHERE $condition");
foreach($array as $k=>$v){

$stmt->bindParam(":$k", $v);
}

try{
$stmt->execute();
}catch(PDOException $e){
$error = new main_c();
echo $error->error_handling($e);
}

return $row=$stmt->fetch(PDO::FETCH_ASSOC);
}

我试过在条件中省略 AND 并只放置一个 where 子句并且它起作用了。我认为 foreach 中存在问题。不过我不确定。

最佳答案

您绑定(bind)的不是值,而是参数,因此在您的循环中,您仅将一个变量 $v 绑定(bind)到键 $k。两次。当您执行查询时,这些变量将包含循环最后一次迭代的值。

您需要更改 bindParam()bindValue() .

但是,由于您没有使用 bindParam()/bindValue() 的第三个参数 - 强制数据类型 - 您可以跳过整个循环并执行以下操作:

try {
$stmt = $db->prepare("SELECT * FROM $tablename WHERE $condition");
$stmt->execute($array);
...

关于php - PDO : creating a reusable code,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29644039/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com