将mysql转换为PDO时的空白网页

时间:2014-03-07 11:09:09

标签: php mysql pdo

您好我已经开始将我的mysql更改为PDO,然后我的代码开始变大并且导致问题的风险我尝试更改我的代码部分,但屏幕显示为白色这是我的原始代码:

class SelectList
{
    protected $conn;

        public function __construct()
        {
            $this->DbConnect();
        }

        protected function DbConnect()
        {
            include "db_config.php";
            $this->conn = mysql_connect($host,$user,$password) OR die("Unable to connect to the database");
            mysql_select_db($db,$this->conn) OR die("can not select the database $db");
            return TRUE;
        }
         public function ShowPrinciple()
        {
            $sql = "SELECT principle.principle_id,principle.description,principle.section_id,COUNT(media.principle_id) as media_count
                    FROM principle 
                    LEFT OUTER JOIN media ON principle.principle_id = media.principle_id 
                    AND principle.section_id = media.section_id 
                    WHERE principle.section_id={$_POST['id']}
                    GROUP BY principle.principle_id,principle.description";
            $res = mysql_query($sql,$this->conn);
            $principle = '<option value="%">choose...</option>';
            while($row = mysql_fetch_array($res))
            {
                $principle .= '<option value="' . $row['principle_id'] . '">' . $row['description'].  '...('.$row['media_count'].') </option>';
            }
            return $principle;
        }
}
$opt = new SelectList();

我已经尝试过一个简单的查询来开始改变,但我似乎做错了可能有人指出我,我很肯定这将是我已经改变的东西。

这是我目前获得的代码:

class SelectList
{

$host = '127.00.00.00';
$user = 'user';
$password = 'password';
$db =  'database'; 

 try{ 
    $conn = new PDO("mysql:host=$host;dbname=$db", $user, $password);
    echo 'connected to the database<br />';

    public function ShowPrinciple()
    {

        $stmt = $conn -> prepare(
                    "SELECT principle.principle_id,principle.description,principle.section_id,COUNT(media.principle_id) as media_count
                    FROM principle 
                    LEFT OUTER JOIN media ON principle.principle_id = media.principle_id 
                    AND principle.section_id = media.section_id 
                    WHERE principle.section_id={$_POST['id']}
                    GROUP BY principle.principle_id,principle.description");
        $q = $conn->query($stmt) or die("failed!)";
        $principle = '<option value="%">choose...</option>';
        while($row = fetchAll($q))
        {
            $principle .= '<option value="' . $row['principle_id'] . '">' . $row['description'].  '...('.$row['media_count'].') </option>';
        }
        return $principle;
    }catch(PDOException $e){
        echo $e->getMessage();
    }
}
$opt = new SelectList();

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:1)

所以你不知道怎么写课,对吗?第一:检查您的错误报告!如果它没有打开,请将其打开。 PHP应该在这里输出一些致命的错误。以下代码无效:

class Bla {
    $var1 = 'foo';
    $var2 = 'bar';

    try {
        public function doSth() { ... }
    } catch (SomethingException $e) {
        doSthWthExcpetion();
    }
}

这不是正确的PHP。让自己适应依赖注入或其他东西,这就像这样:

class Bla {
    protected $dbHandle = null;

    public function __construct() {
        $this->dbConnect();
    }

    public function dbConnect() {
        $this->dbHandle = new PDO(...);
    }

    public function doSthDatabseish($variable) {
        try {
            $stmt = $this->dbHandle->prepare("SLECET something FROM myTable WHERE variable = :variable");
            $stmt->bindValue(':variable', $variable);
            $stmt->execute();

            foreach ($stmt->fetchAll(PDO::FETCH_ASSOC) as $row) {
                $value[] = $row;
            }
        } catch (PDOException $e) {
            // errorhandling
        }

        return $value;
    }
}

你看到了区别吗?切勿在函数之间编写代码。代码属于函数定义。正如您的第一个示例类所示,您在connectDB()函数中建立数据库连接。那你为什么不参加你班上的PDO版本呢?

答案 1 :(得分:-1)

您的$conn->prepare()来电缺少右括号。 (即最后将$conn->prepare(...改为$conn->prepare(...);(注意te“)”字符。“

同样适用于$conn->query() or die(...部分。

您看到白页的原因是您的服务器配置为不在屏幕上显示错误。将您的php.ini文件调整为display_errors=Onerror_reporting=E_ALL以实际查看错误。

答案 2 :(得分:-1)

您的主要错误是

or die("failed!)"; 

这是多余的,括号错误。

设置错误模式。 之后

$conn = new PDO(...

添加

$conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); 

您对PDO的使用也是错误的。您可以使用

query()没有参数(你的情况)

$query = ( "SELECT ....");
$stmt = $conn->query($query);  
// setting the fetch mode  
 $stmt->setFetchMode(PDO::FETCH_ASSOC);  
$principle = '<option value="%">choose...</option>';
while($row = $stmt->fetch()) { 

etc...

OR prepare()execute()带参数

$stmt = $conn -> prepare("SELECT....")
//Bind parameters here or as an array in execute()
$stmt->execute();
$stmt->setFetchMode(PDO::FETCH_ASSOC); 
   while($row = $stmt->fetch()){