Php 我的第一个数据库连接

Php 我的第一个数据库连接,php,mysql,mysql-real-escape-string,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(

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

我的连接到数据库的代码似乎还可以,但仍然不起作用。这是我的代码:

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;
}
函数uuu构造(){
如果(!@mysql\u ping()){
$this->db_connect();
}
$sql=“从设置中选择值,其中字段='auto_logout';
$res=mysql\u fetch\u array($this->execute\u single\u query($sql));
$this->LOGIN_DURATION=$res['value'];
}
专用函数db_connect(){
//Mysql连接
$link=@mysql\u connect('localhost','created\u who\u has\u all\u prev','pass\u note\u my\u cpanel\u and\u mysql\u has\u same\u pass');
如果(!$link){
die('无法连接:'.mysql_error());
}
//echo“已成功连接
”; //Mysql选择数据库选择---> $db\u selected=mysql\u select\u db($this->db,$link); 如果(!$db_选中){ die('无法使用指定的数据库:'.mysql_error()); } //echo“
所选数据库
”; 返回$link; }
这是快照:

这是一段非常草率的代码。我会使用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、准备好的状态和单例模式,以了解其工作原理。

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

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() {}

}
最后一个警告是其他警告的后果

要解决此问题-由于您尚未提供执行查询的实际部分的详细信息-以下是如何重新编写代码以使其正常工作:

$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'];

这是谁主持的?我非常怀疑您的用户是“root”,因为这是使用MySQL创建的初始帐户。因此,该用户应该为托管公司的管理员保留。您可能应该使用您在应用程序中禁用的任何用户名登录screenshot@immulatin我的本地托管公司给了我共享托管计划的根帐户。同样对于OP,请查阅MySQL函数的文档。它们被官方贬值了,而且很可怕。考虑改写以使用MySQL,没有什么是完全安全的。请不要误导新用户。PDO更安全。@Jhawinss我从来没有说过完全安全,你说了。我只是说它是安全的。根据其他连接之间的级别不同,主题也不同。此外,我想让他做研究并理解它,但我猜他只是在寻找答案。@Claudee你说“我只是说它是安全的”,因此你说它是安全的。安全的定义是“没有或没有暴露在危险或伤害中;安全”。说“安全”意味着它是“完全安全的”,因为这就是“安全”一词的意思。我没有使用u'r代码,但我使用了u'r意见,你在回答的第一段中提到了这一点。谢谢你的帮助。我将尝试从下一步开始使用mysqli:)