【问题标题】:Bind_param() on a non-object-error when using variables as input使用变量作为输入时出现非对象错误时的 Bind_param()
【发布时间】:2014-10-13 19:03:03
【问题描述】:

尝试使用 mysqli 进行更新,方法是调用这样的类函数:

$nyVaegt = 10;
$navn = 'Ord';

$nyOevelse = new oevelse();
$nyOevelse->opdaterOevelse( $nyVaegt, $navn );

这是对应的类函数:

public function opdaterOevelse (
        $nyVaegt,
        $navn)

    {
        $this->nyVaegt = $nyVaegt;
        $this->navn = $navn;

        global $mysqli;

        $stmtopdaterOevelseIHistorik = $mysqli->prepare("UPDATE oevelser SET `vaegt12reps`=? WHERE `navn`='?' VALUES (?, ?)");
        var_dump($stmtopdaterOevelseIHistorik);
        $stmtopdaterOevelseIHistorik->bind_param(
                "ds", 
                $nyVaegt,
                $navn);

        $stmtopdaterOevelseIHistorik->execute();

if ( $stmtopdaterOevelseIHistorik )
       echo "Query success!<br>";
   else
       echo "Query failed!<br>";

      }

如果我这样运行它,它会说:

Call to a member function bind_param() on a non-object

错误是指这一行:

$stmtopdaterOevelseIHistorik->bind_param(

var_dump 响应:bool(false)

看来,绑定参数时出了点问题。

如果我绕过变量并像这样调用:

$stmtopdaterOevelseIHistorik = $mysqli->prepare("UPDATE oevelser SET `vaegt12reps`=100 WHERE `navn`='Ord'");

效果很好……

尝试了各种''、""-变体,但我无法让它发挥作用...... - 你们这些好人有什么建议......?

【问题讨论】:

  • 基本调试:您意识到$stmtopdaterOevelseIHistorik 为空.. 退后一步,直到找到应该设置它的位置。 $mysqli-&gt;prepare().. 好吧,那失败了。 Let's look up the docs。 “如果发生错误,则返回 FALSE” - 好的,我如何从 prepare() 调试错误的返回值...从那里开始
  • @Fred-ii- - 非常感谢,当然我不应该添加价值,现在可以正常工作,谢谢一百万 - 有时你看不到森林的树木......
  • @ErikLassen 不客气,Erik。我已经删除了我的 cmets 并将其作为答案发布在下面。

标签: php mysqli


【解决方案1】:

据我所知,UPDATE 不使用 VALUES:

另外,删除 ='?' 中的引号,这是造成以下情况的主要原因:

在非对象上调用成员函数 bind_param()

将现有行更改为以下内容:

$stmtopdaterOevelseIHistorik = $mysqli->prepare("UPDATE oevelser SET `vaegt12reps`=? WHERE `navn`=?");

【讨论】:

    猜你喜欢
    • 2014-11-15
    • 1970-01-01
    • 2013-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-18
    • 2011-07-28
    相关资源
    最近更新 更多