Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将mysql转换为PDO时的空白网页_Php_Mysql_Pdo - Fatal编程技术网

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

Php 将mysql转换为PDO时的空白网页,php,mysql,pdo,Php,Mysql,Pdo,您好,在我的代码开始变大并有可能导致问题之前,我已开始将mysql更改为PDO。我已尝试更改代码的一部分,但屏幕显示为白色这是我的原始代码: class SelectList { protected $conn; public function __construct() { $this->DbConnect(); } protected function DbConnect()

您好,在我的代码开始变大并有可能导致问题之前,我已开始将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选择列表
{
保护$conn;
公共函数构造()
{
$this->DbConnect();
}
受保护的函数DbConnect()
{
包括“db_config.php”;
$this->conn=mysql\u connect($host、$user、$password)或die(“无法连接到数据库”);
mysql_选择_db($db,$this->conn)或die(“无法选择数据库$db”);
返回TRUE;
}
公共职能原则()
{
$sql=“选择principle.principle\u id,principle.description,principle.section\u id,计数(media.principle\u id)作为媒体计数
原则上
principle.principle\u id=media.principle\u id上的左外连接媒体
和principle.section\u id=media.section\u id
其中principle.section_id={$\u POST['id']}
按原则分组。原则标识、原则说明”;
$res=mysql\u查询($sql,$this->conn);
$principle='choose…';
while($row=mysql\u fetch\u数组($res))
{
$principle.=''.$row['description']。…('.$row['media_count']);
}
回报原则;
}
}
$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();
class选择列表
{
$host='127.00.00.00';
$user='user';
$password='password';
$db=‘数据库’;
试试{
$conn=newpdo(“mysql:host=$host;dbname=$db”、$user$password);
echo“已连接到数据库
”; 公共职能原则() { $stmt=$conn->准备( 选择principle.principle\u id,principle.description,principle.section\u id,COUNT(media.principle\u id)作为媒体计数 原则上 principle.principle\u id=media.principle\u id上的左外连接媒体 和principle.section\u id=media.section\u id 其中principle.section_id={$\u POST['id']} 按原则分组。原则id,原则说明); $q=$conn->query($stmt)或die(“失败!)”; $principle='choose…'; while($row=fetchAll($q)) { $principle.=''.$row['description']。…('.$row['media_count']); } 回报原则; }捕获(PDO$e){ echo$e->getMessage(); } } $opt=new SelectList();
任何帮助都将不胜感激。

您的
$conn->prepare()
调用缺少右括号。(即将
$conn->prepare(…
更改为
$conn->prepare(…);
(注意te”)“字符结尾)

同样的事情也适用于
$conn->query()或die(…
零件


您看到白色页面的原因是服务器配置为不在屏幕上显示错误。请将php.ini文件调整为
display\u errors=on
error\u reporting=E\u ALL
,以实际查看错误。

您的主要错误是

or die("failed!)"; 
这是多余的,括号是错误的

设置错误模式。 之后

另外,您使用PDO是错误的

无参数(您的案例)


因此,您不知道如何编写类,对吗?首先:检查错误报告!如果没有打开,请打开它。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版本中?

您的$conn->prepare调用缺少右括号。@Tularis我没有注意到这一点,谢谢,但我仍然有相同的结果您的$conn->query()或死(block也有同样的问题。空白页表示脚本正在抛出错误,但您尚未将PHP配置为显示错误消息。这是您在进一步操作之前需要解决的问题;如果没有错误消息的帮助,则无法正确编写代码。下面是一个示例。@ÁlvaroG.Vicario我的服务器配置为显示错误消息但是目前仍然没有做soi已经修复了两个缺少的括号,但是我的php.ini文件已经设置为显示错误,正如您所说的那样。您必须更改php.ini文件本身的设置;或者直接更改,或者(如果使用apache)通过..htaccess file.yes,我通过服务器进入了php.ini文件,并确保所有的值都正确。正如您所说,它已经设置为显示错误消息。我已经尝试了这两种方法,但都没有奏效=/其他任何想法?@lvaroG.Vicario更好?您是否查看了答案中的链接,尤其是查询()中的链接?什么是不工作?@davidstrachan这意味着每次我试图将代码更改为PDO版本时,我只能得到一个空白页面,当我使用firebug或任何调试工具时,他们无法告诉我页面有什么问题
$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...
$stmt = $conn -> prepare("SELECT....")
//Bind parameters here or as an array in execute()
$stmt->execute();
$stmt->setFetchMode(PDO::FETCH_ASSOC); 
   while($row = $stmt->fetch()){
class Bla {
    $var1 = 'foo';
    $var2 = 'bar';

    try {
        public function doSth() { ... }
    } catch (SomethingException $e) {
        doSthWthExcpetion();
    }
}
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;
    }
}