【问题标题】:PHP file included but code not working包含 PHP 文件但代码不起作用
【发布时间】:2012-12-08 21:27:53
【问题描述】:

我正在尝试从 PHP 函数中连接 mysql。凭据存储在一个单独的 PHP 文件中,我将其包含在函数中。但是当我运行脚本时,我收到以下错误:

Warning: mysql_query(): A link to the server could not be established in C:\xamp
p\htdocs\abc\test.php on line 12. Access denied for user 'ODBC'@'localhost' (using password: NO)    


private function insertToMysql()
{
    include_once('connect_db.php');

    $connection = mysql_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD) or die('Oops connection error -> ' . mysql_error());
    mysql_select_db(DB_DATABASE, $connection) or die('Database error -> ' . mysql_error());

    //Queries

}

我尝试回显 include_once 并返回 1。这意味着,connect_db.php 已包含在内,但不知何故未加载常量。可能是什么问题???凭据是完美的,我验证了它们。我不是 PHP 新手。

connect_db.php 的内容:

<?php
  define('DB_SERVER', 'localhost');
  define('DB_USERNAME', 'root');
  define('DB_PASSWORD', '<MyPassword>');
  define('DB_DATABASE', 'testdb');
?>

【问题讨论】:

  • 你能把带有敏感信息的connect_db.php的内容贴出来吗。
  • 您是否尝试过 echo $connection 以查看是否正常? '//Queries' 之后的函数中是否所有 mysql_query() 命令?
  • mysql_query() 出现错误。您应该发布漏洞代码,因为发布的行似乎完全正确。此外,你不应该使用 mysql_,因为它已被弃用。
  • mysql_connect()mysql_select_db() 似乎都是正确的。否则,您应该会看到错误“糟糕...”或错误“数据库错误...”。
  • 不要再使用不安全的 mysql_* API,它已被弃用!而是将 PDO 或 mysqli 与 preared 语句一起使用。在phptherightway.com 上阅读良好的 PHP 实践

标签: php mysql include


【解决方案1】:

似乎$connection 是一个局部变量,您可以通过使其成为全局变量来解决此问题。

这样做。

include_once('connect_db.php');
$connection = mysql_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD) or die('Oops connection error -> ' . mysql_error());
mysql_select_db(DB_DATABASE, $connection) or die('Database error -> ' . mysql_error());

function insertToMysql()
{
    //Queries
    mysql_query('Some query');
}

【讨论】:

  • 使连接全局化有点不安全。
  • 不会让它不封装吗? (假设函数在一个类中)
  • 在这种情况下你是对的,但这也不是一个好方法,应该建立一次连接,而不是在每个函数调用中。
  • 那么你说的连接应该是静态变量还是静态方法?
  • 不,它只是需要扩大范围,你可以在类中通过 public 或 private 来定义它
【解决方案2】:

删除连接处理程序

private function insertToMysql()
{
    include_once('connect_db.php');

    mysql_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD) or die('Oops connection error -> ' . mysql_error());
    mysql_select_db(DB_DATABASE) or die('Database error -> ' . mysql_error());

    //Queries

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-11
    • 2022-08-20
    • 2012-09-22
    • 2015-02-05
    • 1970-01-01
    • 2016-02-17
    • 1970-01-01
    相关资源
    最近更新 更多