6

我制作了一个使用 MySQL 语法编写的 CMS 脚本。

我想用 PDO 语法替换 MySQL 语法。有人可以帮我做,并向我解释怎么做吗?

这是脚本中的代码。

<?php
    $querytemp = mysql_query("select * from main_setting") or die (mysql_error());
    $row = mysql_fetch_object($querytemp);

    include "inc/upcenter_block.php";

    echo "
        <div class='headmenu'>$row->news1</div>
        <div class='bodymenu'>
        <p>".nl2br($row->news)."</p>
    </div> ";

    include "inc/downcenter_block.php";
?>
4

2 回答 2

10

首先,如果您想从更改mysql_*PDO

您将需要更改脚本中的所有代码,而不仅仅是一个不起作用的代码

如果您要将代码从 mysql_* 更改为 PDO

您将不得不使用 PDO 更改与数据库的连接

这是一个示例:

// here we set the variables 
$dbhost = "localhost";
$dbname = "testcreate";
$dbuser = "root";
$dbpass = "mysql";

// here we are using ( try {} ) to catch the errors that will shows up and handle it in a nicer way
    try {
    $db = new PDO('mysql:host='.$dbhost.';dbname='.$dbname.';charset=utf-8', ''.$dbuser.'', ''.$dbpass.'');
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    } catch (PDOException $e) {
        echo 'Error : <br>' . $e->getMessage();
    }

// here we set the varible for the connection = then starting the cennction with new POD();
$db = new PDO('mysql:host='.$dbhost.';dbname='.$dbname.';charset=utf-8', ''.$dbuser.'', ''.$dbpass.'');

// here we set an Attribute to handle the errors
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// you dont need to use it in our case because we already catching the error and handling it in out way

  // here we catch the error then handling it by echo a msg and then we used
  // $e->getMessage(); to get the error msg that should be throwing in the page
    catch (PDOException $e) {
        echo 'Error : <br>' . $e->getMessage();
    }

------------------------------------------

现在我们完成了连接,我将向您展示如何查询和获取表

 // this is how we will use query
 $qr = $db->query()

 // and this is how to fetch it by taking the query variable and use the arrow then fetch 
 $ro = $qr->fetch()

我将向您展示您的代码示例

$querytemp = mysql_query("select * from main_setting") or die (mysql_error());
$row = mysql_fetch_object($querytemp);

我们将其更改为

$querytemp = $db->query("select * from main_setting");
$row = $querytemp->fetch(PDO::FETCH_OBJ);

所以现在你可以使用$row->newsPDO

现在您可以轻松地将代码更改为 PDO

于 2013-07-04T10:11:15.200 回答
3

转换该脚本将类似于以下内容:

// $pdo = connection

try {
    $stmt = $pdo->prepare("select * from main_setting");
    $stmt->execute();
    $row = $stmt->fetch(PDO::FETCH_OBJ);
} catch (\PDOException $e) {
    // something went wrong
}

// ...

这是解释:

  • PDO::prepare将从 MYSQL 查询中创建一个准备好的语句并将其存储到一个变量中。
  • PDOStatement::execute将使用传递给它的参数数组执行准备好的语句(在这种情况下为 none,因为查询没有任何参数)。
  • PDOStatement::fetch将获取上次执行的结果。默认情况下,它会提取到一个数组中。如果你通过PDO::FETCH_OBJ它将获取到一个对象。

PDO默认使用异常,这意味着您可以使用 try-catch 块来捕获错误(异常类型为PDOException)。

另请注意:

$stmt = $pdo->prepare("select * from main_setting");
$stmt->execute();

可以使用PDO::query, 缩短为:

$stmt = $pdo->query("select * from main_setting");
于 2013-07-04T02:14:32.690 回答