【问题标题】:INSERT INTO mysqli returns non-objectINSERT INTO mysqli 返回非对象
【发布时间】:2015-01-12 21:02:41
【问题描述】:

已编辑!

一直在查看有类似问题的帖子,但似乎找不到适合我情况的答案 - 希望你们能提供帮助。

更新:已根据输入更新了我的代码 - 谢谢!我看到了进步,但是:

现在,只有在while-loop 中调用 INSERT INTO 时,我才会在下面收到错误 Call to a member function bind_param() on a non-object

$stmtTjekFindesOevelse、$stmtFindOevelsesID 和 $stmtGemNyVaegtOgRepsSet 自己工作正常(当在代码中手动输入变量时)只有在 while 循环中 $stmtGemNyVaegtOgRepsSet 失败并显示上述错误消息。

$stmtFindOevelsesID 将始终返回一个整数(id)。如果没有这个id,会被if ($stmtTjekFindesOevelse->num_rows() > 0)发现,代码不会运行。

猜测 while 循环有问题 - 只是不知道在这种情况下使用哪种替代方案......

    $navn = 'Brystpres';
    $vaegt = 10;
    $reps = 11;
    $antalGangeUdfoert = 11;

    global $mysqli;

        $stmtTjekFindesOevelse = $mysqli->prepare("SELECT * FROM oevelser WHERE navn=?");
        $stmtTjekFindesOevelse->bind_param("s", $navn);
        $stmtTjekFindesOevelse->execute();
        $stmtTjekFindesOevelse->store_result();

if ($stmtTjekFindesOevelse->num_rows() > 0)   
{

    $stmtFindOevelsesID = $mysqli->prepare("SELECT id FROM oevelser WHERE navn=?");
    $stmtFindOevelsesID->bind_param("s", $navn);
    $stmtFindOevelsesID->execute();
    $stmtFindOevelsesID->bind_result($oevelsesID);

while ($stmtFindOevelsesID->fetch()) {


$stmtGemNyVaegtOgRepsSet = $mysqli->prepare("INSERT INTO vaegtogreps (oevelsesreference, vaegt, reps, antalgangeudfoert) VALUES (?, ?, ?, ?)");

    $stmtGemNyVaegtOgRepsSet->bind_param("idii", $oevelsesID, $vaegt, $reps, $antalGangeUdfoert);

    $stmtGemNyVaegtOgRepsSet->execute();
}
}

【问题讨论】:

    标签: php mysql mysqli insert


    【解决方案1】:

    您在列中使用了错误的identifiers

    ('oevelsesreference', 'vaegt', 'reps', 'antalgangeudfoert')
    

    去掉引号

    (oevelsesreference, vaegt, reps, antalgangeudfoert)
    

    或在列名周围使用反引号:

    (`oevelsesreference`, `vaegt`, `reps`, `antalgangeudfoert`)
    

    对您的查询使用错误检查会表明这一点。

    变化:

    $stmtGemNyVaegtOgRepsSet->execute(); 
    

    到:

    if(!$stmtGemNyVaegtOgRepsSet->execute()){
    trigger_error("There was an error....".$mysqli->error, E_USER_WARNING);
    }
    

    为了得到错误的原因。


    编辑:

    我相信我找到了对我有用的解决方案,它在“vaegtogreps”表中插入了以下内容。

    ovelsesreference vaegt reps antalgangeudfoert 1 10 11 11

    您需要使用 store_result() 进行第二次 SELECT。

    只需在其中添加$stmtFindOevelsesID->store_result();

    $stmtFindOevelsesID = $mysqli->prepare("SELECT id FROM oevelser WHERE navn=?");
    $stmtFindOevelsesID->bind_param("s", $navn);
    $stmtFindOevelsesID->execute();
    $stmtFindOevelsesID->bind_result($oevelsesID);
    
    // added and working
    $stmtFindOevelsesID->store_result();
    

    【讨论】:

    • 谢谢 - 引号实际上是作为测试添加的,但感谢您指出我需要使用反引号。以前尝试过没有(现在使用正确的反引号)位仍然得到相同的错误。还有其他想法吗?
    • @ErikLassen 不客气,Erik;工作前的食物;)我会看看我能做些什么来设置一个类似的数据库来实现这个目标。无论哪种方式,我都会及时通知您。
    • @ErikLassen 我相信 Erik。最好让这个小伙子开心;)现在,我相信我找到了解决问题的办法。重新加载我的答案并在 Edit 下查看详细信息。 干杯
    • @Fred-ii- 太棒了,它有效! :) 感谢一百万加倍努力来帮助我——希望有一天能够熟练地帮助你;)
    • @ErikLassen 非常欢迎您,Erik,我很乐意为您提供帮助,干杯,谢谢 :)
    【解决方案2】:

    问题是你的插入语句:

    INSERT INTO vaegtogreps ('oevelsesreference', 'vaegt', 'reps', 'antalgangeudfoert')
                             ^                 ^  ^     ^  ^    ^  ^                 ^
    

    列的引号是反引号而不是单引号:

    `column1`, `column2` // 反引号

    所以要么省略它们,要么使用反引号:

    INSERT INTO vaegtogreps (`oevelsesreference`, `vaegt`, `reps`, `antalgangeudfoert`) VALUES (?, ?, ?, ?)
    

    【讨论】:

    • 喜欢图形功能 ;) G'day Ghost。我 +1,干杯不知道你也在制定答案。
    • 谢谢 - 引号实际上是作为测试添加的,但感谢您指出我需要使用反引号。以前尝试过没有(现在使用正确的反引号)位仍然得到相同的错误。还有其他想法吗?
    • @ErikLassen 这很奇怪,你确定这是你唯一的代码吗?
    • @Ghost 我终于弄清楚了问题所在。
    【解决方案3】:

    关于你得到的错误:
    Fatal error: Call to a member function bind_param() on a non-object

    Trying to get property of non-object
    看来您没有正确实例化您的 mysqli 连接。

    试着像PHP Doc中提到的那样做:

    $mysqli = new mysqli("dbhost", "dbuser", "dbpass", "dbname");  
    
    if (mysqli_connect_errno()) {
        printf("Connect failed: %s\n", mysqli_connect_error());
        exit();  
    }
    

    【讨论】:

    • OP 声明 “SELECT 工作正常,顺便说一句。” 所以,这似乎不是连接错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-11
    • 1970-01-01
    • 2010-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多