-1

几个小时以来,我一直在用头撞墙,在 SO 上阅读了几个答案,在网上搜索,试图找到解决方案。虽然我意识到这里已经提出并回答了类似的问题,但我的代码不同,所以我无法从以前的答案中推断出我的问题。

我是 PHP/MySQL 的新手。我有一个投票脚本,我使用我在网上找到的一些代码和我自己的知识拼凑在一起;MySQL是我的,标准的东西。每当一个人为两件事中的一件投票时,它在数据库中的对应值就会增加一。我正在尝试检索每个值并将其分配给它自己的变量并执行计算。我可以很好地检索第一个,但我得到了可怕的
Trying to get property of non-object in..." error
"Fatal error: Call to a member function bind_param() on a non-object in...

对于第二个。和第一次prepare一模一样,不知道怎么了?这可能不是最有效的方法,但就像我说的,我是新手。我确实理解错误试图传达的内容;除了 WHERE 子句中的 id 之外,我只是不明白为什么当 prepare 语句与之前的语句相同时会出现错误。 var_dump($query2)返回bool(false),所以我可以清楚地看到那里什么都没有。但是数据库中有一些东西。

<?php       
    // Turn on error reporting
    ini_set('display_errors', 'On');

    // Connect to database
    $mysqli = mysqli_connect('localhost', 'dbuser', 'dbpwd', 'dbname');

    // Check connection
    if (!$mysqli || $mysqli->connect_errno)
    {
        echo "Connection error: " . $mysqli->connect_errno . " " . $mysqli->connect_error;
        exit();
    } else if (isset($action))  // This is set through a page redirect
        {       
            // DISPLAY ITEM - THIS WORKS FINE
            if (!($query = $mysqli->prepare("SELECT votes FROM influential WHERE id = 1")))
            {
                echo "Prepare failed: "  . $query->errno . " " . $query->error;
            }

            if (!$query->execute()){
                echo "Execute failed: "  . $mysqli->connect_errno . " " . $mysqli->connect_error;
            }

            if (!$query->bind_result($infl1))
            {
                echo "Bind failed: "  . $mysqli->connect_errno . " " . $mysqli->connect_error;
            }

            if ($query->fetch())
            {
                echo $infl1;
            }

            // DISPLAY ITEM - THIS DOESN'T WORK
            if (!($query2 = $mysqli->prepare("SELECT votes FROM influential WHERE id = 2")))
            {
                echo "Prepare failed: "  . $query2->errno . " " . $query2->error;
            } else echo "Prepare succeeded.";

            $query2->bind_param("i", $votes);

            if (!$query2->execute()){
                echo "Execute failed: "  . $mysqli->connect_errno . " " . $mysqli->connect_error;
            } else echo "Execute succeeded.";

            if (!$query2->bind_result($infl2))
            {
                echo "Bind failed: "  . $mysqli->connect_errno . " " . $mysqli->connect_error;
            } else echo "Bind succeeded.";

            if ($query2->fetch())
            {
                echo $infl2;
            }

            exit();
            $mysqli->close();
        } 
?>
4

1 回答 1

0

在 mysqli 中,当您发出命令时:

.bind_param()

您将参数绑定到原始查询中的占位符,而不是结果中。您的选择查询应为:

SELECT `votes` FROM `influential` WHERE `id`=?;

然后,您使用 bind_param 将整数绑定到占位符,因此:

.bind_param('i', $id);

调用 .execute() 后,通过调用 .bind_result() 使用引用绑定结果。无论您传递给 .bind_result() 的任何变量都将包含之后的数据。

干杯

于 2013-11-13T05:16:49.260 回答