PDO:创建可重用代码
PDO : creating a reusable code
我正在尝试在 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 中存在问题。不过我不确定。
您绑定的不是值,而是参数,因此在您的循环中,您仅将一个变量 $v
绑定到键 $k
。两次。当您执行查询时,这些变量将包含循环最后一次迭代的值。
您需要更改 bindParam()
to bindValue()
。
但是,由于您没有使用 bindParam()
/ bindValue()
的第三个参数 - 强制数据类型 - 您可以跳过整个循环并执行:
try {
$stmt = $db->prepare("SELECT * FROM $tablename WHERE $condition");
$stmt->execute($array);
...
我正在尝试在 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 中存在问题。不过我不确定。
您绑定的不是值,而是参数,因此在您的循环中,您仅将一个变量 $v
绑定到键 $k
。两次。当您执行查询时,这些变量将包含循环最后一次迭代的值。
您需要更改 bindParam()
to bindValue()
。
但是,由于您没有使用 bindParam()
/ bindValue()
的第三个参数 - 强制数据类型 - 您可以跳过整个循环并执行:
try {
$stmt = $db->prepare("SELECT * FROM $tablename WHERE $condition");
$stmt->execute($array);
...