Php 当PDO语句在搜索表单的if语句之外时,查询为空错误

Php 当PDO语句在搜索表单的if语句之外时,查询为空错误,php,mysql,search,pdo,prepared-statement,Php,Mysql,Search,Pdo,Prepared Statement,当我将PDO语句放在搜索表单的if语句之外时,收到一个查询为空的错误。下面的代码工作正常,没有错误,但在我尝试构建分页时会产生问题: if (isset($_POST['submit'])) { $countryname = $_POST['country']; $sql = "SELECT * from epic_schools_tbl where country = :countryname order by school_name"; $stmt = $pdo

当我将PDO语句放在搜索表单的if语句之外时,收到一个查询为空的错误。下面的代码工作正常,没有错误,但在我尝试构建分页时会产生问题:

if (isset($_POST['submit'])) { 
    $countryname = $_POST['country'];
    $sql = "SELECT * from epic_schools_tbl where country = :countryname order by school_name";  
    $stmt = $pdo->prepare($sql);
    $stmt->bindParam(':countryname', $countryname);
    $stmt->execute();
    $row_count = $stmt->rowCount();
    if (isset($_POST['clear'])) { 
        $sql = "";
    }
} 
下面的代码非常理想,但在prepare($sql)处绘制的查询为空错误:


如何解决上述代码中的查询为空错误?

试试看是否有帮助

    <?php
    if (isset($_POST['submit'])) { 
        $stmt = $pdo->prepare("SELECT * FROM epic_schools_tbl WHERE country = :countryname ORDER BY school_name ASC");
        $stmt->bindParam(':countryname', $countryname);
        $countryname = $_POST['country'];
        if ($stmt->execute()) {
            $row_count = $stmt->rowCount();
            echo $row_count;
        } else {
            echo "Sorry could not retrieve records";
        }
    }
    ?>

示例2已更新

<?php
    if (!empty($_POST['country'])) {
        $sql = "SELECT * FROM epic_schools_tbl WHERE country = :countryname ORDER BY school_name"; 
    } else {
        echo "Sorry the country name is empty. Cannot continue";
    }
    $stmt = $pdo->prepare($sql);
    $stmt->bindParam(':countryname', $countryname);
    $countryname = $_POST['country'];
    if ($stmt->execute()) {
        $row_count = $stmt->rowCount();
        echo $row_count;
    } else {
        echo "Sorry could not retrieve records. Unable to perform query";
    }
?>


如果您使用常识-您将看到,当案例碰到
else
时,
$sql
变量被设置为空字符串-然后您尝试将该空字符串作为查询执行。来吧。。。。猜猜如果你在if/ELSE中选择ELSE路线会发生什么?!?!?!?!万一你不能。。。您得到了一个空查询问题是,如果查询是空字符串,为什么还要准备查询?我感谢您的帮助,但删除else并没有解决问题。当删除else时,我收到了一个额外的错误,未定义的variable,但是如果它出现在else中,那么您的$sql是空的,因此您得到了您所说的错误。如果完全删除else,则未设置
$\u POST['submit']
时,$sql未定义。你的逻辑是这里的问题。第一种方法有什么问题?你想实现什么?这是可行的,但与我的第一个示例类似。我希望在if语句之外有带$stmt变量的pdo语句。请问为什么@B6431当我尝试构建分页时,它导致了问题。每个分页按钮都将位于一个输入元素内,该元素将更改查询。我看到了一个工作示例,其中if语句中只有select语句。这就是我试图用这种方式构造它的原因。如果您的示例是标准过程,我将接受您的答案,并尝试用另一种方式创建分页。请尝试我的第二个示例,看看它是否在@B6431中起作用
<?php
    if (!empty($_POST['country'])) {
        $sql = "SELECT * FROM epic_schools_tbl WHERE country = :countryname ORDER BY school_name"; 
    } else {
        echo "Sorry the country name is empty. Cannot continue";
    }
    $stmt = $pdo->prepare($sql);
    $stmt->bindParam(':countryname', $countryname);
    $countryname = $_POST['country'];
    if ($stmt->execute()) {
        $row_count = $stmt->rowCount();
        echo $row_count;
    } else {
        echo "Sorry could not retrieve records. Unable to perform query";
    }
?>