将MySQL代码迁移到PDO

时间:2013-11-30 20:12:09

标签: php mysql sql pdo

我是PDO的新手,我正在尝试转换现有的PHP / MYSQL代码以满足PDO标准。

我遇到的问题是我可以连接到数据库,但没有显示任何结果,也没有显示错误。

这是我的数据库:

$db2 = new PDO('mysql:host=localhost;dbname=DATABASENAME;charset=utf8', 'USERNAME', 'PASSWORD');
$db2->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db2->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

我正在使用

include 'db.php';

在我的主PHP脚本中包含上述数据库详细信息。

我的主脚本使用以下作为select语句来显示符合条件的行:

<?

foreach($db2->query('SELECT view_invoice FROM user_info where username = "$timeapp_username"') as $inrow) {
$inrow['view_invoice']; //etc...

}

?>

运行此操作时,我没有错误但没有显示结果。我无法发现我做错了什么。谁能告诉我这里做错了什么?

1 个答案:

答案 0 :(得分:1)

查询函数不安全,只能用于不返回数据的查询,如UPDATE,DELETE,INSERT ......

要进行安全且有效的SELECT查询,请使用PDOStatement准备查询。参见:

//Example querystring
$id = $_GET['id'];

try{
 //Instantiate PDO
 $pdo = new PDO('dsn', 'user', 'password');

 //Create the statement
 $statement = $pdo->prepare("SELECT * FROM `my_table` WHERE `id`=:id");

 //Now you can bind values to the statement. This will automatically escape the values

 //Defines the type of the value that you'll bind (optional)
 $data_type = (is_numeric($id)) ? PDO::PARAM_INT : PDO::PARAM_STR;

 //Replace the :id in the query by the value retrieved from the querystring
 $statement->bindValue(':id', $id, $data_type);

 //Now, let's execute our statement
 $statement->execute();

 //If the query has returned any rows, we can iterate over it
 if ($statement->rowCount() > 0)
 {
     foreach ($statement->fetchAll() as $result)
     {
         //Now you can retrieve the values using the defined fetch method.
         //Example with associative fetch mode:
         echo 'My name is '.$result['name']."!";
         echo '<br />';
     }
 }
 else
 {
     //No results found
 }

 } catch (PDOException $pe){
    die("An error has occurred: ".$pe->getMessage());
 }