2013-06-19 2 views
0

나는 현지 회사에서 도메인 호스팅을 구입했습니다. 그들의 고객 서비스는 꽤 끔찍합니다.첫 번째 데이터베이스 연결

데이터베이스에 연결하기위한 코드가 괜찮은 것처럼 보이지만 여전히 작동하지 않습니다.

function __construct(){ 
    if([email protected]_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

+0

? MySQL에 의해 생성 된 초기 계정이기 때문에 사용자가 'root'라는 것을 매우 의심합니다. 따라서 해당 사용자는 호스팅 회사의 관리자 용으로 예약해야합니다. 스크린 샷에 검은 색으로 표시된 사용자 이름으로 로그인해야합니다. – immulatin

+0

@immulatin 내 로컬 호스팅 회사에서 공유 호스팅 계획에 대한 루트 계정을 제공했습니다. 또한 OP에 MySQL 기능에 대한 설명서를 찾아보십시오. 그들은 공식적으로 가치가 떨어지고 끔찍합니다. 대신 MySQLi를 사용하도록 다시 작성하십시오. – user1596138

답변

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']; 
+0

나는 u'r 코드를 사용하지 않았지만 u'r 코드의 첫 번째 단락에서 언급 한 u'r 의견을 사용했습니다. 도와 줘서 고맙다. 다음부터 mysqli를 사용하려고합니다 :) – whoone

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 준비된 문에서도, 그리고 싱글 톤 패턴을 조사해야합니다.

+0

아무 것도 완벽하게 안전하지 않습니다. 새로운 사용자를 오도하지 마십시오. PDO는 더 안전합니다. – user1596138

+0

@Jhawinsss 나는 결코 완벽하게 말하지 않았다. 나는 그것이 안전하다고 간단히 말했다. 다른 연결 사이의 레벨에 따라 다른 주제가 있습니다. 또한, 나는 그가 연구를하고 그것을 이해하기를 원했지만 그는 단지 대답을 찾고 있었다고 생각한다. – Claude

+0

@Claudee 당신은 "나는 그것이 안전하다고 간단히 말했습니다."그래서 당신은 안전하다고 말했습니다. 안전의 정의는 "위험에 노출되거나 노출되지 않고 안전하다"는 것이다. 무언가가 "안전하다"라고 말하면 그것이 안전하다는 단어를 의미하기 때문에 그것이 "완벽하게 안전하다"는 것을 의미합니다. – user1596138