在PHP 5.3上准备选择类型的错误请求
我正在尝试进行准备类型选择,但它不起作用,我看不到错误在哪里 感谢您的帮助和解释:)在PHP 5.3上准备选择类型的错误请求,php,Php,我正在尝试进行准备类型选择,但它不起作用,我看不到错误在哪里 感谢您的帮助和解释:) 试试看{ $sql=“从'eq_base'中选择*”; $sql.=“其中`eq\u base`.`DateAchat`>=$sel\u date或`eq\u base`.`DateAchat`=\'0000-00-00\”; 如果(!(“$sel_-type”==99999)){$sql.=”和`eq_-base`.`type`=:sel_-type”;} 如果(!($sel_etat==99999)){$
试试看{
$sql=“从'eq_base'中选择*”;
$sql.=“其中`eq\u base`.`DateAchat`>=$sel\u date或`eq\u base`.`DateAchat`=\'0000-00-00\”;
如果(!(“$sel_-type”==99999)){$sql.=”和`eq_-base`.`type`=:sel_-type”;}
如果(!($sel_etat==99999)){$sql.=“和`eq_base`.`etat`=sel_etat”}
如果(!empty(“$sel_modele”){$sql.=“和`eq_base`.`modele`LIKE%:sel_modele%”;}
如果(!empty(“$sel_fourniseur”){$sql.=”和`eq_base`.`fourniseur`LIKE%:sel_fourniseur%;}
$sql.=“按'eq_base`.'cle`'排序”;
变量转储($sql);
$db=数据库::getInstance();
$req=$db->prepare($sql);
$req->bindValue(“:选择日期”,“选择日期”);
$req->bindValue(':sel_类型',$sel_类型);
$req->bindValue(':sel_etat',$sel_etat);
$req->bindValue(':sel_modele',$sel_modele);
$req->bindValue(':sel_Fourniseur',$sel_Fourniseur);
$req->execute();
$temp=$req->fetchAll();
//$updated=$req->rowCount();
}捕获(例外$e){
错误日志($e);
抛出新的异常(“这是一个错误,是一个错误,是一个错误,是一个错误,是一个错误,是一个错误。”);
}
}
首先,您有一些语法错误,比如在if语句if(!(“$sel_type”==99999))
中重复引用变量,以及忘记将:
放在sel_etat
之前
其次,您正在创建查询dynamicali,但是您正在绑定所有变量。您应该进行与生成查询时相同的检查,以确保只绑定查询中存在的变量
像这样的东西应该有用
try{
$sql = " SELECT * FROM `eq_base`";
$sql .= " WHERE (`eq_base`.`DateAchat` >= ':sel_date' or `eq_base`.`DateAchat` = '0000-00-00') ";
if (($sel_type!=99999)) { $sql .= " AND (`eq_base`.`Type` = ':sel_type')"; }
if (($sel_etat!=99999)) { $sql .= " AND (`eq_base`.`Etat` = ':sel_etat')"; }
if (!empty($sel_modele)) { $sql .= " AND (`eq_base`.`Modele` LIKE '%:sel_modele%')"; }
if (!empty($sel_fournisseur)) { $sql .= " AND (`eq_base`.`Fournisseur` LIKE '%:sel_fournisseur%')"; }
$sql .= " ORDER by `eq_base`.`cle`";
var_dump($sql);
$db = Database::getInstance();
$req = $db->prepare($sql);
$req->bindValue(':sel_date',$sel_date);
if (($sel_type!=99999)){
$req->bindValue(':sel_type',$sel_type);
}
if (($sel_etat!=99999)) {
$req->bindValue(':sel_etat',$sel_etat);
}
if (!empty($sel_modele)){
$req->bindValue(':sel_modele',$sel_modele);
}
if (!empty($sel_fournisseur)){
$req->bindValue(':sel_fournisseur',$sel_fournisseur);
}
$req->execute();
$temp = $req->fetchAll();
//$updated = $req->rowCount();
}
catch (Exception $e) {
error_log($e);
throw new Exception("Une erreur s'est produite lors de la création de l'équipement informatique.");
}
是的,Dimitris我的代码在下面,我的日志错误也在下面
试试看{
$sql=“从'eq_base'中选择*”;
$sql.=“(其中'eq\u base`.'DateAchat`>=:sel\u date或'eq\u base`.'DateAchat`=\'0000-00-00\”);
如果($sel_-type!==99999){$sql.=”和`eq_-base`.`type`=:sel_-type”}
如果($sel_-etat!==99999){$sql.=“和`eq_-base`.`etat`=:sel_-etat”}
if(!(空($sel_modele)){$sql.=“和`eq_base`.`modele`LIKE:sel_modele”;}
if(!(空($sel_fourniseur)){$sql.=”和`eq_base`.`fourniseur`LIKE:sel_fourniseur”;}
$sql.=“按'eq_base`.'cle`'排序”;
$db=数据库::getInstance();
$req=$db->prepare($sql);
var_转储($req);
$req->bindValue('sel_日期',$sel_日期);
如果($sel_type!==99999){
$req->bindValue('sel_类型',$sel_类型);
}
如果($sel_etat!==99999){
$req->bindValue('sel_etat',$sel_etat);
}
如果($sel_modele!==99999){
$req->bindValue('sel_modele','%.$sel_modele'%');
}
如果($sel_fourniseur!==99999){
$req->bindValue('sel_Fourniseur','%'。$sel_Fourniseur'%');
}
$req-execute();
$resultat=$req->fetchAll();
}捕获(例外$e){
错误日志($e);
抛出新的异常(“这是一个错误,是一个错误,是一个错误,是一个错误,是一个错误,是一个错误。”);
}
}
sel_etat中的bind变量缺少:
,另外,当您动态包含SQL的各个组件时,这包括存在哪些绑定变量。因此,您可能绑定到了语句中没有的变量。在构建查询的第二行中,您的查询中有一个PHP变量$sel_date
,周围没有引号,但它可能需要它。似乎您有一个引用问题?我的建议是不要一次编写一个复杂的查询,而是从简单、测试、更正开始,然后从那里慢慢构建它。这将防止您陷入甚至不了解自己的代码可能有什么问题的情况。您正在使用或查询中,之后可能会出现大量and。尝试将其放在括号中:检查我的更新答案,我在querywhat中为值添加了单引号,这是var\u dump($sql)的输出代码>?var_dump($sql)=字符串(180)“从eq_base中选择*,其中(eq_base.DateAchat>=:sel_date或eq_base.DateAchat=“0000-00-00”)和eq_base.Type=:sel_Type和eq_base.Etat=:sel_Etat ORDER by eq_base.cle”和var_dump($resultat)=是一个空数组$req-execute()代码>应该是$req->execute()代码>这一次,代码向我加载表,但我不恢复任何数据,我使用未准备好的请求来恢复数据