php - 函数、SQL 连接和全局变量

标签 php sql function global

通过在两者之间使用 mysql_query 和 mysql_fetch_array 命令调用下面的函数来连接和关闭数据库有什么问题

<?php

function dbconnect()
{   
    $sql = "localhost"; 
    $username = "------";
    $password = "-----";
    $connection = mysql_connect($sql, $username, $password) or 
    die("unwable to cct");
    $databse = mysql_select_db("-------", $connection); 
    global $connection;
}

function close()
{
    global $connection;
    mysql_close($connection);
}

dbconnect();
$query = "Some SQL Statement";
$data = mysql_query($query, $connection); - L1
while (mysql_fetch_assoc($data))
{
  //echo something 
}
close();
?>

目前,我收到一条错误消息,指出 L1 处的 $connection 需要是资源,但却是 BOOL。如果我在那里给出一个 die 语句,同样会被触发。我不知道出了什么问题。请尽可能找出任何错误。我必须从编码中休假,一段时间后我会回来。

感谢和问候

最佳答案

在分配 $connection 变量之前,您必须使用 global 关键字。否则,您将在函数内声明本地 $connection,然后调用对尚不存在的全局 $connection 的引用。在其他函数中,使用了不存在的全局变量。

function dbconnect()
{   
    // Global first to be sure the subsequent $connection is the global
    // rather than a new one local to this function
    global $connection;

    $sql = "localhost"; 
    $username = "------";
    $password = "-----";
    // Now this modifies the global $connection
    $connection = mysql_connect($sql, $username, $password) or die("unwable to cct");
    $databse = mysql_select_db("-------", $connection); 
}

使用 $GLOBALS 数组更具可读性:

function dbconnect()
{   
    $sql = "localhost"; 
    $username = "------";
    $password = "-----";

    // Using the $GLOBALS superglobal array
    $GLOBALS['connection'] = mysql_connect($sql, $username, $password) or die("unwable to cct");
    $databse = mysql_select_db("-------", $GLOBALS['connection']); 
}

最好的方法是从 dbconnect() 返回 $connection 并在其他函数中使用该值:

function dbconnect()
{   
    $sql = "localhost"; 
    $username = "------";
    $password = "-----";
    $connection = mysql_connect($sql, $username, $password) or 
    die("unwable to cct");
    $databse = mysql_select_db("-------", $connection);

    // Return from the function
    return $connection; 
}

// call as 
$connection = dbconnect();
// and define your other functions to accept $connection as a parameter

关于php - 函数、SQL 连接和全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13387485/

相关文章:

PHP 目录错误 - open_basedir 限制生效

java - Android Json Parse 不返回任何内容

PHP 代码一直有效,直到我将它变成一个函数

php - 使用函数全局更改数组值

Python检查函数是否存在而不运行它

php - Curl 无法正确识别 cookie 中的过期值

php - 从 PHP 调用 C/C++ 库函数

php - Laravel SQL 查询返回重复项

SQL 服务器 : How to update table based on subquery in where clause?

sql - 如何将 "DISTINCT ON"与Arel/ActiveRecord结合使用?