【问题标题】:bind_param not working (on a non-object) mysqli prepared statementbind_param 不起作用(在非对象上)mysqli 准备好的语句
【发布时间】:2015-04-09 18:32:37
【问题描述】:

到目前为止,我已经在这里阅读了大约 15 篇关于此类问题的帖子,但没有一个能够帮助我。

我有以下代码:

$stmt3 = $mysqli->prepare("SELECT cc.name, cc.company, cc.email FROM (`case_contacts` cc) WHERE cc.case_id=? AND cc.end_date IS NULL");
if (is_object($stmt3)) {
    $stmt3 -> bind_param("i", $case_id);
} else {
    die('Connection issue');
}
$stmt3 -> execute();
$stmt3 -> bind_result($name, $company, $email);
while ($stmt3->fetch()) {

当我执行它时,它会提示“连接问题”。然而就在$stmt3 之前,我可以很高兴地 var_dump $mysqli。

我已经手动将查询输入到 phpmyadmin 和在线查询检查器中,并且都确认它是有效的。

我已经检查了用户的权限,他们都很好。事实上,我正在将查询从 mysql 重写为 mysqli,并希望使用准备好的语句。所以数据库用户是一样的。我对其他比这更复杂的准备好的语句没有任何问题,所以我真的对我所缺少的感到茫然。

我什至过度使用了语句中的“`”引号,因为我知道我应该在每个查询中使用!

任何建议,调试技巧都会很棒。我环顾四周,发现没有提供输出。

【问题讨论】:

    标签: php mysql database mysqli prepared-statement


    【解决方案1】:

    mysqli_stmt::prepare ( string $query ) 返回TRUE 或FALSE 阅读更多:

    http://php.net/manual/en/mysqli.prepare.php

    你可以使用这个例子:

    <?php
    
    $mysqli = mysqli_connect('localhost', 'root', 'admin', 'test');
    
    $case_id = 603;
    
    $sentence =  $mysqli->stmt_init();
    if($sentence->prepare("SELECT name, company, email FROM case_contacts WHERE case_id = ? AND end_date IS NULL")) {
    
        $sentence->bind_param("i", $case_id);
        $sentence->execute();
        $sentence->bind_result($name, $company, $email);
    
        while ($sentence->fetch()) {
            echo $name . ' - ' . $company . ' - ' . $email;
        }   
    }   
    

    【讨论】:

    • 但是我当前的测试语句应该返回 true 但返回 false - 如果我这样做,它不会总是为 false。
    • @n00bstacker 当你替换 ?通过一个值并在 phpmyadmin 中测试查询 sql 是否正常?
    • yup 显示第 0 - 1 行(共 2 行,查询耗时 0.0001 秒)
    • @n00bstacker 用更多代码编辑问题并添加表的 sql,以便在我的服务器中进行测试,让我知道
    • 这将是 1000 行代码 - 你知道在粘贴所有代码之前我可以调试的任何方法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-23
    • 2015-06-15
    • 2013-03-24
    • 1970-01-01
    • 2012-12-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多