如何在PDO中编写以下代码

时间:2012-06-06 01:43:26

标签: php mysql pdo

我有一个旧的mysql代码,我想将其转换为PHP数据对象,但我无法在网上找到如何做到这一点,任何帮助?

    $num = mysql_num_rows($result = mysql_query($query));

while($row = mysql_fetch_array($result))
  {

...
}

$ query是一个SELECT语句。

更新:

我的代码只显示消息“找不到驱动程序”而不显示其他内容,它没有显示表单代码或类似内容。我在PDO中做错了什么?我知道数据库,主机名,用户名和密码是正确的,所以它应该能够显示表单,然后让我连接到数据库。

<?php

session_start(); 

$hostname = 'localhost';
$username="xxx";
$password="xxx";
$database="mobile_app";

try {
    $dbh = new PDO("mysql:host=$hostname;dbname=$database", $username, $password);


?>

,,, //Form Code is in here

<?php
if (isset($_POST['submit'])) {

$query = "
SELECT * FROM Teacher t  
WHERE 
(t.TeacherUsername = '".mysql_real_escape_string($teacherusername)."')
AND
(t.TeacherPassword = '".mysql_real_escape_string($teacherpassword)."')
";

$loged = false;

foreach ($dbh->query($sql) as $row)
  {

,,,, //results for each row



  }

 $dbh = null;

}

    }
catch(PDOException $e)
    {
    echo $e->getMessage();
    }
 ?>

2 个答案:

答案 0 :(得分:3)

$result = $link->query($query); # Replace $link with your database handle
$rows = $link->fetchAll(PDO::FETCH_BOTH);
$num = count($rows);

foreach($rows as $row) {
    # ...
}

......是直接的等价物。当然,您可能不需要PDO::FETCH_BOTH(我推荐PDO::FETCH_OBJ用于更清洁包中的相同功能),您可能希望利用参数化查询,在这种情况下您要调用prepare而不是query,然后绑定参数,然后调用execute()来获取结果。

您可能会发现the reference for PDOStatement有帮助。

编辑:正如评论者指出的那样,rowCount()并不是那么好,即使它是最直接的等价物。我用更好的东西更新了它。

答案 1 :(得分:2)

try {
    $dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}

// PDOStatement is traversable, so you could use foreach.
foreach ($dbh->query($sql) as $row) {
  //...
}