2

我有一个旧的 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();
    }
 ?>
4

2 回答 2

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()以获取结果。

您可能会找到有用的参考。PDOStatement

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

于 2012-06-06T01:46:20.850 回答
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) {
  //...
}
于 2012-06-06T01:48:17.480 回答