我第一次数据库连接

时间:2013-06-19 03:41:31

标签: php mysql mysql-real-escape-string

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

我连接到数据库的代码似乎没问题,但仍无效。这是我的代码:

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;
}

这是快照: enter image description here

2 个答案:

答案 0 :(得分: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,准备好的语句和单例模式,以了解其工作原理。

答案 1 :(得分: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'];