2

PHP データ オブジェクトに変換したい古い mysql コードがありますが、これを行う方法を Web で見つけることができません。

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

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

...
}

$query は SELECT ステートメントです。

アップデート:

私のコードは「ドライバーが見つかりませんでした」というメッセージを表示しているだけで、フォームコードなどは表示されていません。PDO で何が間違っていますか? データベース、ホスト名、ユーザー名、パスワードが正しいことはわかっているので、フォームを表示してDBに接続できるはずです。

<?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 に答える