【发布时间】:2015-03-23 08:41:42
【问题描述】:
我试图将简单的 MySQLi 查询转换为 PDO 准备语句 这是旧代码
if($mode=='')
{
$query="SELECT * FROM items WHERE 1";
if($CuisineId != '')
{
$query=$query. " AND CuisineId='$CuisineId' ";
}
if($CategoryId != '')
{
$query=$query. " AND CategoryId='$CategoryId' ";
}
if($DietId != '')
{
$query=$query. " AND DietId='$DietId' ";
}
$query=$query. " ORDER BY Name ";
$result= execute_query($con,$query) or die(mysqli_error($con));
echo "<option value=''>Select One</option>";
while ($row=mysqli_fetch_array($result)) {
echo "<option value=". $row['Id'] .">" . $row['Name'] . "</option>";
}
}
带有预处理语句的新代码看起来像这样,并且工作正常
if($mode=='')
{
$query="SELECT * FROM items WHERE 1";
if($CuisineId != '')
{
$query=$query. " AND CuisineId=? ";
}
if($CategoryId != '')
{
$query=$query. " AND CategoryId=? ";
}
if($DietId != '')
{
$query=$query. " AND DietId=? ";
}
$query=$query. " ORDER BY Name ";
$stmt = $con->prepare($query);
$stmt->execute(array($CuisineId,$CategoryId,$DietId));
$stmt->setFetchMode(PDO::FETCH_ASSOC);
echo "<option value=''>Select One</option>";
while($row = $stmt->fetch()) {
echo "<option value=". $row['Id'] .">" . $row['Name'] . "</option>";
}
}
这个新代码运行良好,但这是新代码中最坏的情况。
如果$CuisineId 或$CategoryId 或$DietId 为空怎么办?查询不会连接,会在这一行抛出错误
$stmt->execute(array($CuisineId,$CategoryId,$DietId));
如果我开始做 IF ELSE 将所有可能性,它会使我的代码太长。有没有办法解决这个问题?
提前谢谢你:)
【问题讨论】:
标签: php mysql pdo mysqli prepared-statement