Php 将mysql转换为PDO时的空白网页
您好,在我的代码开始变大并有可能导致问题之前,我已开始将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()
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;
}
}