0

我从当地公司购买了一个域名托管服务。他们的客户服务非常糟糕。

我用于连接数据库的代码似乎没问题,但仍然无法正常工作。这是我的代码:

function __construct(){
    if(!@mysql_ping()){
        $this->db_connect();
    }
    $sql  = "SELECT value FROM settings WHERE field =  'auto_logout'";
    $res  = mysql_fetch_array($this->execute_single_query($sql));
    $this->LOGIN_DURATION = $res['value'];
}


private function db_connect(){
    // Mysql connect
    $link = @mysql_connect('localhost', 'created_who_has_all_prev', 'pass_note_my_cpanel_and_mysql_has_same_pass');

    if (!$link) {
        die('Could not connect: ' . mysql_error());
    }
    //echo 'Connected successfully<br/>';
    // Mysql select db select --->
    $db_selected = mysql_select_db($this->DB, $link);
    if (!$db_selected) {
        die ('Can\'t use specified Database : ' . mysql_error());
    }
    //echo "<br/>Database Selected<br/>";
    return $link;
}

这是快照: 在此处输入图像描述

4

2 回答 2

1

这真是草率的代码。我会使用 PDO,因为它是安全的。下面是一个你可以使用的课程,但要研究它是如何工作的以及它为什么工作。

class Core {

    public $dbh; // handle of the db connection
    private static $instance;

    private function __construct()  {

        $options = array(PDO::ATTR_PERSISTENT => true, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION);

        $this->dbh = new PDO("mysql:host=localhost;dbname=dealership", "root", "",$options);            

    }

    public static function getInstance() {
        if (!self::$instance) {

        self::$instance = new self();

    }
    return self::$instance;
    }

    private function __clone() {}
    private function __wakeup() {}

}

在您的代码中调用如下:

require "/classes/pdo.class.php";

 $db = Core::getInstance();

 $stmt = "SELECT `lastname` FROM `employees` where id = 2";

 $pep = $db->dbh->prepare($stmt);
 $pep->execute();


 foreach($pep->fetchAll(PDO::FETCH_ASSOC) as $row) {

     echo $row['lastname']. "\n";
  }

确保您查看 PDO、准备好的语句和单例模式以了解其工作原理。

于 2013-06-19T03:57:33.683 回答
1

您的主要问题是您创建的链接不可访问。因此,PHP 尝试使用默认值进行连接(显然在您的设置中,这意味着用户是root),并且由于它没有密码,因此连接失败,这是大多数警告消息的原因。

最后一个警告是其他警告的结果。

要解决这个问题 - 因为您没有提供正在执行查询的实际部分的详细信息 - 以下是如何重新编写代码以使其正常工作:

$mysqli = new mysqli("localhost", "user", "password", "database");
if ($mysqli->connect_errno) {
    echo "(".$mysqli->connect_errno.") ".$mysqli->connect_error;
}

$sql = "SELECT `value` FROM `settings` WHERE `field` = ?";
$stmt = $mysqli->prepare($sql);
$stmt->bind_param("s","auto_logout");

if (!$stmt->execute()) {
    echo "(".$stmt->errno.") ".$stmt->error;
}

$res = $stmt->get_result();
$row = $res->fetch_assoc();
LOGIN_DURATION = $row['field'];
于 2013-06-19T04:11:13.510 回答