Mysqli在远程服务器上收到警告但在本地工作

时间:2013-02-26 06:13:21

标签: php mysqli

我有以下查询在本地工作,但我在远程服务器上收到警告。

$query_getMainPage = $conCreative->query("SELECT l.*, p.* FROM languagep l INNER JOIN pages p ON (l.languagePageBelongs=p.pageID) WHERE p.pageBelongs=0");
$row_getMainPage = mysqli_fetch_assoc($query_getMainPage); 
$totalRows_getMainPage = mysqli_num_rows($query_getMainPage);

我得到的警告是

警告:mysqli_fetch_assoc()要求参数1为mysqli_result,在...中给出布尔值

这是我第一次使用Mysqli而不是MySql,所以我猜我在使用函数的方式上做错了。

1 个答案:

答案 0 :(得分:0)

当然,你在其他服务器上工作时没有做错事 它是导致错误的远程服务器环境。

但是,无论您使用的是mysql还是mysqli,都应该做一件事 - 您必须检查查询结果并处理错误。
至少这样做:

$sql = "SELECT count(*) FROM languagep l INNER JOIN pages p 
        ON (l.languagePageBelongs=p.pageID) WHERE p.pageBelongs=0";
$res = $con->query($sql) or trigger_error($con->error."[$sql]");
  • 因此,您将收到有关mysql错误的通知,并能够采取适当的措施。

但你的代码还存在另一个问题 - mysqli 不要使用mysqli。 使用PDO 它将为您节省很多令人头疼的问题。

PDO使用简单但功能强大

首先,创建一个连接

$dsn  = 'mysql:dbname=test;host=localhost;charset=utf8';
$opt  = array(
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
);
$pdo = new PDO($dsn, $user, $pass, $opt);

然后用它来运行查询:

$sql = "SELECT count(*) FROM languagep l INNER JOIN pages p 
        ON (l.languagePageBelongs=p.pageID) WHERE p.pageBelongs=0";
$sth = $pdo->prepare($sql);
$sth->execute();
$totalRows = $sth->fetchColumn();

如果您不仅需要计算,还需要所有数据:

$sql = "SELECT * FROM languagep l INNER JOIN pages p 
        ON (l.languagePageBelongs=p.pageID) WHERE p.pageBelongs=0";
$sth = $pdo->prepare($sql);
$sth->execute();
$data = $sth->fetchAll();
$totalRows = count($data);