【问题标题】:use mysqli in a function global variable does not work在函数全局变量中使用 mysqli 不起作用
【发布时间】:2017-12-25 14:35:50
【问题描述】:

如果我使用以下代码一切正常:

function likecount($id) {
$link = mysqli_connect('localhost', 'root', '', 'printstagram');
    $query = $link->query("SELECT likes FROM photos WHERE id='$id'");
    $a = mysqli_fetch_row($query);
    $b=$a[0];
    echo $b;
}

如果我使用一个名为 dbconfig.php 的文件,它的代码如下:

$link = mysqli_connect('localhost', 'root', '', 'printstagram');

然后我在使用likecount函数的php页面中包含dbconfig.php,然后使用全局关键字:

function likecount($id) {
    global $link;
    $query = $link->query("SELECT likes FROM photos WHERE pid='$id'");
    $a = mysqli_fetch_row($query);
    $b=$a[0];
    echo $b;
}

我得到一个错误:mysqli_fetch_row() 期望参数 1 是 mysqli_result,给定的布尔值。

谁能告诉我错误来自哪里?该函数负责统计和更新点赞数。如果我每次调用函数都使用mysqli_connect,我会在一个页面中多次使用mysqli_connect,这是个问题吗?与全局 $link 相比,我相信每次调用函数时建立连接都会给服务器增加更多压力。

我对以下代码进行了一些进一步的测试:

<?php
include('dbconfig.php');
global $link;
echo $link;
?>

我得到:可捕获的致命错误:类 mysqli 的对象无法转换为字符串。 这被认为是一种普通的行为吗?

我又做了一次测试,下面的代码可以正常运行(但每次调用函数都会建立连接):

<?php

function likes2($id) {
  $link = mysqli_connect('localhost', 'root', '', 'printstagram');

    $query = $link->query("SELECT likes FROM photos WHERE pid='$id'");

    $a = mysqli_fetch_row($query);
    $b=$a[0];
    echo $b;

}
?>

但以下不是:

<?php
$link = mysqli_connect('localhost', 'root', '', 'printstagram');
function likes2($id) {

    global $link;
    $query = $link->query("SELECT likes FROM photos WHERE pid='$id'");
    $a = mysqli_fetch_row($query);
    $b=$a[0];
    echo $b;

}
?>

它给出了错误:mysqli_fetch_row() 期望参数 1 是 mysqli_result,boolean given

【问题讨论】:

  • 错误提示您的查询执行失败
  • 我知道,但我想知道它失败的原因。我看了这个答案:stackoverflow.com/questions/10836078/… 我不知道为什么他们的代码有效,但我的无效
  • 据我所知,您的代码没有任何问题,可能是由于您的数据库,显示您的 photo 数据库架构或数据库内容。该错误表明您的 mysql_fetch_row($qeury) 没有产生任何结果。
  • 嗨hchueng,如果我的数据库有问题,它不应该“可选”地工作。问题是只要我每次调用函数时都建立一个新的mysqli连接,一切都会顺利进行,但是如果我使用全局$link它就不会
  • 当您将echo $link-&gt;error(); 放在与$link-&gt;query() 的链接之后的likecount 函数中时会打印什么?

标签: php mysqli


【解决方案1】:

就是这样的 index.php

require "dbconnect.php";
function likecount($item_id) {
    global $link;
    $query = $link->query("SELECT likes FROM photos WHERE pid='$item_id'");
    $a = mysqli_fetch_row($query);
    $b=$a[0];
    echo $b;
}
likecount($item_id);

这是 dbconnect.php

$link = mysqli_connect('localhost', 'root', '', 'printstagram')

【讨论】:

  • 我认为您选择了“SELECT likes FROM photo”likes is unknown column 。请再检查一遍
【解决方案2】:

我检查了你的两个代码都工作正常!问题可能与您的数据库名称有关,您使用两个不同的数据库“test”和“printstagram”可能是数据库 printstagram 的“printstagram”照片表没有您正在搜索的 id 的记录。

你可以检查是否有这样的记录。

if($a = mysqli_fetch_row($query)){
    $b=$a[0];
    echo $b;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-08
    • 2015-07-09
    • 2013-07-13
    • 2017-05-20
    • 2013-09-21
    • 1970-01-01
    • 2014-05-16
    相关资源
    最近更新 更多