我有一个旧的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();
}
?>
答案 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) {
//...
}