我想在其中设置一个包含多个参数的数组,将其传递给我的数据库类。目前我只能发送一个参数,但一般来说我的SQL查询都有多个参数。
示例数据库方法:
public function fetchQuery($sql,$params,$conn){
try{
$queryparams=array($params);
$x=$conn->prepare($sql);
$x->execute($queryparams);
$rArray = $x->fetchAll(PDO::FETCH_ASSOC);
return $rArray;
}catch (Exception $e){
die( print_r( $e->getMessage() ) );
}
}
调用数据库方法:
$params=$vendID;
$sql = "SELECT Email from Contact WHERE VendID = ?";
try{
$emails=$db->fetchQuery($sql,$params,$conn);
$eCount = count($emails);
if($eCount>0){
foreach($emails as $row){
$eArray[]=$row['Email'];
}
}else{
echo "No email addresses associated with this vendor";
}
}
catch(Exception $e){
die( print_r( $e->getMessage() ) );
}
现在说我的sql查询是这样的:“从联系人中选择*,其中CustID =?和Expired =?” 我如何构建一个数组并将其传递给我的函数?
每次尝试时,我都会得到一个数组到字符串转换错误。
由于
答案 0 :(得分:3)
现在说我的sql查询就像:"从联系人中选择*,其中CustID =? 和过期=?"我将如何构建一个数组并将其传递给我的数组 功能
我会删除代码的$queryparams=array($params);
部分,并且即使它只有一个元素,也总是将函数传递给数组。
$params= array($custID);
$sql = "SELECT Email from Contact WHERE VendID = ?";
try{
$emails=$db->fetchQuery($sql,$params,$conn);
多发性
$params= array($vendID, $expired);
$sql = "Select * from Contact where CustID=? and Expired=?";
try{
$emails=$db->fetchQuery($sql,$params,$conn);
我个人更喜欢命名参数,我可以使用关联数组:
$sql = "Select * from Contact where CustID= :custId and Expired= :expired";
$params= array(':custId'=>$custID,
':expired'=>$expired
);
答案 1 :(得分:2)
在你的fetchQuery方法中,你可以检查$ params是否已经是一个数组。
<?php
if (is_array($params)) {
$queryParams = $params;
}
else {
$queryParams = array($params);
}
答案 2 :(得分:0)
您实际上并不需要此功能。它可以节省您输入几个单词的费用 但同时它限制了您使用PDO。用raw pdo查看你的代码
$stmt = $con->prepare("SELECT Email from Contact WHERE VendID = ?");
$stmt->execute([$vendID]);
$emails = $stmt->fetchAll(PDO::FETCH_COLUMN);
if(!$emails){
echo "No email addresses associated with this vendor";
}
它比你的功能短3倍 PDO本身已经是一个包装器。一个人需要非常强大的理由和太多的经验才能够熟练地扩展它。