2016-10-11 5 views
0

에있는 널 (NULL)에 대한 prepare() 함수 호출 치명적인 오류 : C : \ xampp \ htdocs \ af \ functions \ indexdatasummary.php 온라인의 null에서 prepare() 멤버 함수를 호출하십시오. 6치명적인 오류 :

dbconnect.php

global $dbh; 

//Server Variables========--------------> 

$af_host="localhost";            
$af_root="root";              
$af_password=""; 

//Database Variables========------------> 

$af_cbms_database="af_cbms"; 

    try 
     { 
      $dbh = new PDO("mysql:host=$af_host", $af_root, $af_password); 
      $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); 
      $af_cbms_database = "`" . str_replace("`", "``", $af_cbms_database) . "`"; 
      $dbh->query("CREATE DATABASE IF NOT EXISTS $af_database"); 
        $dbh->query("SET CHARACTER SET utf8"); 
        $dbh->query("USE $af_database"); 
        $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); 
     } 
    catch(PDOException $e) 
     { 
      echo $e->getMessage(); 
     } 

내 페이지의 대부분을 위해 노력하고 있지만,이 페이지에서 오류를 보내고 사용하는 위의 코드. 내가 이것을 호출하는 방식은 다른 파일에 대해서도 똑같은 방식이며 이는 오류와 함께 반환하는 유일한 페이지입니다.

indexsummary.php

global $dbh; 

require_once '../functions/dbconnect.php'; 


$stmt = $dbh->prepare("SELECT * FROM `city_tbl`"); 
$stmt->execute(); 

곧 .....이 오류의 원인을 생각

? 어떤 도움이라도!

+0

해당 테이블에 값이 있으며 null이 아닙니다. – bdalina

+1

그게 전부 오류 메시지인가요? $ af_cbms_host/$ af_database - 정의되지 않았거나 잘못 입력되었습니다. 코드에서 예외가 발생하면 오류 메시지가 표시되고 응용 프로그램이 계속 실행됩니다. 데이터베이스 내부에서 오류가 발생했는지 여부는 독립적입니다. '$ dbh '에 올바른 리소스가 있습니까? 오류는 '널 (null)'값에'prepare()'메서드를 호출하려고합니다. 즉,'$ dbh' 변수에'null' 값이 있습니다. – Wizard

+0

이것을 제거하십시오 : $ af_cbms_database = "'". str_replace ("'", "''", $ af_cbms_database). "'"; 그것은 논리가 없습니다, 당신은 이미 db name을 정의했습니다. – num8er

답변

0

이제 작동하며 require_once ''를 변경했습니다. ''); 모르겠지만 코드에 영향을 미칩니다. 필자는 다른 파일과 include() 함수를 사용하여 dbconnect.php를 호출하는 것을 보았습니다.이 파일은 require_once ''를 사용하는 유일한 파일이었습니다. 다만 확실하지 않다 그러나 거기 나는 저 2 개 사이 다름이다는 것을 생각한다.

include('../functions/dbconnect.php'); 


$stmt = $dbh->prepare('SELECT * FROM city_tbl'); 
$stmt->execute(); 

글로벌 $ dbh;

require_once '../functions/dbconnect.php';

$ stmt = $ dbh-> prepare ("SELECT * FROM city_tbl"); $ stmt-> execute(); 당신이 말한대로

는 num8er @, 난 둘 다 작동이 것으로 대신

$af_cbms_database = "`" . str_replace("`", "``", $af_cbms_database) . "`"; 

을하는 나는 그것을 아무 문제가 없습니다

$dbh->query("CREATE DATABASE IF NOT EXISTS `".$af_cbms_database."`"); 

이 방법을 할 수 있음에 동의하지만, 그것의 좋은 전문가가 아닌 코딩. 하지만 난 내 파일의 대부분은 내가 require_once 모르지만 include() 연결을 사용하여 그것을 사용하여 알아 냈어.

0

1) 연결을 만들고 데이터베이스를 만드는 데 발생하는 문제.

$af_cbms_database="af_cbms"; 

후, 당신은 전화 :

당신은 정의 사촌

$dbh->query("CREATE DATABASE IF NOT EXISTS $af_database"); 

귀하의 코드에서 당신이 정의한 $af_database 변수를?

2


)는이를 만들기 위해 너무 비전문적이다 (당신은) 프로그래밍에 익숙처럼 보인다 :

$af_cbms_database = "`" . str_replace("`", "``", $af_cbms_database) . "`"; 
이미 변수 정의했다

후 교체, 재미, 같은 변수를 정의했다는 것을 스스로 신뢰하지 않습니까? (:

또는 당신은 이런 식으로 할 수 없습니다 :

$dbh->query("CREATE DATABASE IF NOT EXISTS `".$af_cbms_database."`"); 
$dbh->query("USE `".$af_cbms_database."`"); 


3), $af_ 같은 변수를 너무 많이 귀하의 코드 재치를 복잡하게이 고정 된 코드에서 간단하지 말라 dbconnect.php의에게 :

<?php 

global $dbh; 

$host  = "localhost";            
$user  = "root";              
$password = ""; 
$db_name = "af_cbms"; 

try { 
    $dbh = new PDO("mysql:host=$host", $user, $password); 
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    $dbh->query("CREATE DATABASE IF NOT EXISTS ".$db_name); 
    $dbh->query("SET CHARACTER SET utf8"); 
    $dbh->query("USE ".$db_name); 
} 
catch(PDOException $e) { 
    die($e->getMessage()); 
} 

4) 보너스 : 일부 과정이 일어날 수 있기 때문에, global $dbh을 사용하지 마십시오, 일부 코드는 repla 수 있습니다 ce $dbh 변수.또한 global 바르를 사용하여 (방식되지 않습니다 :

이렇게 공유 된 물건을 유지하는 몇 가지 개체가 있습니다

require_once('classes/Objs.php'); 
Objs::set('db', $dbh, true); 

과 당신의 다른 파일 :

class Objs { 
    private $data = []; 

    final public static function set($key, $instance, $preventReset = false) { 
    if($preventReset === true AND isset(self::$data[$key])) { 
     return self::$data[$key]; 
    } 
    return self::$data[$key] = $instance; 
    } 

    final public static function get($key, $instance) { 
    return self::$data[$key]; 
    } 
} 

과 당신의 DB 연결 파일에

:

$stmt = Objs::get('db')->prepare('SELECT * FROM city_tbl'); 
+0

이 코드를 사용해 본 적이 있지만 이보다 $ dbh = new PDO ("mysql $ dbh-> query ("CREATE DATABASE NOT EXISTS'af_cbms'"); require_once ''; 일부 오류가 발생 했으므로 include ('')) 그럼 모든 코드 괜찮 았어.하지만 다른 적절한 코딩 오늘 뭔가를 배운 덕분에! – bdalina

+0

한 번 던지고 필요합니까? – num8er

+0

내가 require_once ''를 사용하는 경우 그것은 오류가 발생합니다 치명적인 오류 :() 당신의 코드 제안을했지만, require_once()를 포함하도록 변경하면, 솔루션의 작동, 심지어는 내 오래된 코드 woks. require_once와 다른 뭔가 있을지 모르겠다. 포함한다, 나는 have_once를 시험해 보지 않았다 – bdalina