0

データベースのテーブルに既に行があるかどうかを確認しようとしています。行がある場合、php は別のページにリダイレクトします。行がない場合は、そこにとどまります。これが私が持っているコードです:

$sched_ex = $db->prepare("SELECT COUNT(1) FROM sched WHERE uid = '$uid'");
$sched_ex->execute();

if($sched_ex == 0) { ... } else { redirect }

私は PDO が初めてで、適切に動作させるために何をする必要があるのか​​ わかりません。

編集:

$sched_ex = $db->prepare("SELECT COUNT(1) FROM sched WHERE uid = :uid");
$sched_ex->execute(array(':uid' => $uid));

if($sched_ex->fetchColumn() == 0) { a lot of html }
else {
?>
<script langauge="javascript">
    window.location="../"
</script>
<?php
}

ヘッダーが機能していなかったので、JavaScript を使用しました。しかし、それが問題だとは思いません。

4

2 に答える 2

4

まず、バインドされたパラメーターを使用して、インジェクション攻撃から身を守ります。

$sched_ex = $db->prepare("SELECT COUNT(1) FROM sched WHERE uid = :uid");
$sched_ex->execute(array(':uid' => $uid));

第二に、あなたの質問について:

if($sched_ex->fetchColumn() == 0) { ... } else { redirect }

(参照: http://www.php.net/manual/en/pdostatement.fetchcolumn.php )

于 2012-08-17T12:15:35.270 に答える
2

rowcount関数を使用して、何行あるかを調べることができます (クエリが何かを返した場合)。その後、実際にデータを取得する必要があります。

しかし、その点については、ドキュメントから:

ほとんどのデータベースでは、PDOStatement::rowCount() は SELECT ステートメントの影響を受ける行数を返しません。代わりに、PDO::query() を使用SELECT COUNT(*)して、意図した SELECT ステートメントと同じ述部を持つステートメントを発行し、次に PDOStatement::fetchColumn() を使用して、返される行数を取得します。その後、アプリケーションは正しいアクションを実行できます。

実行後に行をフェッチする必要があります。

$dbh = new PDO($this->mySQLAccessData->hostname, $this->mySQLAccessData->username, $this->mySQLAccessData->password);
$stmt = $dbh->query($sql);
$stmt->setFetchMode(PDO::FETCH_INTO, new kpiData);
$dataCount=0;
foreach($stmt as $kpiData)
{
    $arrKPIData[$dataCount]['year']=$kpiData->year;
    $arrKPIData[$dataCount]['month']=$kpiData->month;
    $dataCount++;
    unset($stmt);
}
于 2012-08-17T12:16:29.607 に答える