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 回答