【问题标题】:Can not find the right codes for bind_param找不到 bind_param 的正确代码
【发布时间】:2014-07-14 02:54:01
【问题描述】:

脚本是登录系统的一部分,这部分是收集有关用户的所有信息。

错误代码:

致命错误:在第 28 行的 /home/s010485/domains/jcsl.nl/public_html/medewerkers/includes/main.php 中的非对象上调用成员函数 bind_param()

致命错误:未捕获的异常 'mysqli_sql_exception' 带有消息“您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以了解在 '? 附近使用的正确语法。和 mw_gegevens_pass=? AND mw_gegevens_p' 在第 6 行' 在/home/s010485/domains/jcsl.nl/public_html/medewerkers/includes/main.php:27

堆栈跟踪:#0 /home/s010485/domains/jcsl.nl/public_html/medewerkers/includes/main.php(27): mysqli->query('?????????SELECT.. .') #1 /home/s010485/domains/jcsl.nl/public_html/medewerkers/index.php(13): include_once('/home/s010485/d...') #2 {main} 在第 27 行的 /home/s010485/domains/jcsl.nl/public_html/medewerkers/includes/main.php 中抛出

if(isset($_POST['login']))
{
$userpassword = md5($_POST['mw_pass']);

    $mw_gegevens_qry = $connection->query("
                                SELECT
                                        * 
                                FROM 
                                        mw_gegevens
                                WHERE   
                                        mw_gegevens_persnr=?
                                AND     
                                        mw_gegevens_pass=?
                                AND
                                        mw_gegevens_pass!='' 
                                ");
            $mw_gegevens_qry->bind_param('is', $_POST['mw_user'],$userpassword);   
            $mw_gegevens_qry->execute();
            $mw_gegevens_qry->close();
    ($mwgegevens = $mw_gegevens_qry->fetch_assoc());
    if($mw_gegevens_qry->num_rows == 0){
    //wrong inlog
        $error['login'] = "FOUT: Uw combinatie van je personeelsnummer en wachtwoord kon niet worden gevonden. Mogelijk heb je een typefout gemaakt.";
    }
    else
    { 
        set_inlog($mwgegevens);
        if(isset($_GET['pagina']))
        {
        header("location: ?pagina=".$_GET['pagina']);
        }
        else
        {
        header("location: index.php?pagina=home");
        }
        exit;
    }
}

【问题讨论】:

  • 在开发过程中将错误报告添加到文件顶部error_reporting(E_ALL); ini_set('display_errors', 1); mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);(如果您尚未这样做)。
  • 我的页面顶部有这个:ini_set('display_errors', 'On'); error_reporting(E_ALL);, 但我会使用你的。
  • 此错误消息mysqli->query('?????????SELECT...') #1 与您发布的代码无关或可能没有任何关系。我建议您使用双引号而不是单引号来表示其中的内容。即:mysqli->query("SELECT...") - 您需要向我们展示更多代码。
  • 在新的错误消息中,他在脚本的其他部分给出了错误。见起始帖。
  • mysqli->query 甚至不在您为代码添加/编辑的内容中。

标签: php mysqli sqlbindparameter


【解决方案1】:

使用bind_param之前需要准备好语句。

$stmt = $mysqli->prepare("INSERT INTO CountryLanguage VALUES (?, ?, ?, ?)");
$stmt->bind_param('sssd', $code, $language, $official, $percent);

编辑:代码现在看起来不错(虽然我不使用 mysqli,所以对它并不完全熟悉)。听起来很傻,你确定$connection$qry 都成功了吗?似乎由于连接和准备步骤不成功,准备可能会失败?

【讨论】:

  • 非常感谢,我更改了代码,但仍然收到相同的错误消息。
  • $qry 没有改变(只有 ?)并且 $connection 是好的。
  • @Colen 好吧,也许我们应该从这个开始......但是。如果您取消准备好的语句并手动将值插入到查询中,它会运行吗?
  • 你的意思是这样 $mw_gegevens_qry = $connection->prepare(" SELECT * FROM mw_gegevens WHERE mw_gegevens_persnr='.$_POST['mw_user'].' AND mw_gegevens_pass='.$userpassword.' AND mw_gegevens_pass!='' ");
  • 我只是想通过 phpmyadmin 或控制台运行它超级手动:SELECT * FROM mw_gegevens WHERE mw_gegevens_persnr='someName' AND mw_gegevens_pass='thePassword' AND mw_gegevens_pass!='';
【解决方案2】:

正如fluffeh指出的那样,您需要在绑定之前准备语句......

$qry = $connection->prepare("UPDATE mw_gegevens SET mw_gegevens_ckey =   ?, mw_gegevens_logintime   =   ? WHERE  mw_gegevens_id =   ?");
echo $connection->error;//displays error
$qry->bind_param('sii', $key,$onlinetijd,$list['mw_gegevens_id']);   
$qry->execute();

$result_set = $qry->get_result();//grab the results

if($result_set->num_rows < 1){

echo "Wrong login";

}

else{
//do something

}

如果你想展示你所做的事情

 while($row = $result_set->fetch_assoc()){
 //echo row 
 }

【讨论】:

  • 完成,我现在收到此错误消息:致命错误:调用 /home/s010485/domains/jcsl.nl/public_html/medewerkers/includes/main 中未定义的方法 mysqli_stmt::fetch_assoc()。 php 在第 31 行
  • @Coolen 查看有关如何获取返回行的编辑,因为错误来自fetch_assoc
  • 感谢您的帮助,但我认为最好重写整个登录脚本。它充满了错误,最好再试一次。我只能给 1 个人学分,但接下来我会得到他们。
  • 好吧,没有问题。祝你好运。
猜你喜欢
  • 2019-04-13
  • 1970-01-01
  • 1970-01-01
  • 2020-11-02
  • 2012-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-28
相关资源
最近更新 更多