我正在尝试在论坛脚本中实现重复的主题阻止系统。由于我对PHP非常差,也许你想帮助我。不幸的是,我什至不确定我是否正在尝试编辑脚本的正确部分,但这是代码:
// If it's a new topic
if ($fid)
{
$subject = pun_trim($_POST['req_subject']);
if ($pun_config['o_censoring'] == '1')
$censored_subject = pun_trim(censor_words($subject));
if ($subject == '')
$errors[] = $lang_post['No subject'];
else if ($pun_config['o_censoring'] == '1' && $censored_subject == '')
$errors[] = $lang_post['No subject after censoring'];
else if (pun_strlen($subject) > 70)
$errors[] = $lang_post['Too long subject'];
else if ($pun_config['p_subject_all_caps'] == '0' && is_all_uppercase($subject) && !$pun_user['is_admmod'])
$errors[] = $lang_post['All caps subject'];
}
所以我正在尝试实现 DB 中是否存在$subject(从主题中选择 *),以这种格式显示错误:$errors[] = $lang_post['主题已经存在'];
谢谢。
有几种方法可以获取它是否在数据库中的信息(这里我使用的是 PDO) 这是通用代码:
$conn = new PDO('mysql:dbname=db_name', 'username', 'password')
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
获取>(PDO::FETCH_NUM)
$sql = $conn->prepare("query_to_db");
$sql->execute();
$rows = $sql->fetch(PDO::FETCH_NUM);
if( $row > 0 ){
echo "the credentials exists";
}
else{
// there is nothing like this in the database
}
MySQL 错误代码 23000
try{
// connection code above mentioned
$sql = $conn->prepare("query_to_db");
$sql->execute();
}
catch(PDOException $e){
if($e->getCode() == 23000){
// the credentials exists
}
else{
// doesn't exists
}
}
rowCount()
$sql = $conn->prepare("query_to_db");
$sql->execute();
$count = $sql->rowCount();
if($rowCount > 0){
//exists in the db
}
else{
//it doesn't exists in the db
}
但是 rowCount 在 mysql 中没有php 文档 说:
对于大多数数据库,PDOStatement::rowCount() 不返回受 SELECT 语句影响的行数。相反,使用 PDO::query() 发出与预期 SELECT 语句具有相同谓词的 SELECT COUNT(*) 语句,然后使用 DOStatement::fetchColumn() 检索将返回的行数。然后,应用程序可以执行正确的操作。
我个人更喜欢fetch->(PDO::FETCH_NUM)
,因为它比其他的更精确。