我正在尝试查看数据库中的表中是否已有行。如果有一行,那么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
}
Header无法正常工作,所以我使用了JavaScript。不过,我怀疑这是个问题。
答案 0 :(得分: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)
答案 1 :(得分:2)
您可以使用rowcount函数找出有多少行(如果查询返回任何内容),那么您将需要实际获取数据。
但是在那个说明中,来自文档:
对于大多数数据库,PDOStatement :: rowCount()不返回受SELECT语句影响的行数。相反,使用PDO :: query()发出一个SELECT COUNT(*)
语句,其语句与预期的SELECT语句相同,然后使用PDOStatement :: fetchColumn()来检索将返回的行数。然后,您的应用程序可以执行正确的操作。
执行后需要fetch行:
$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);
}