我在制作带有mysql和php的程序时遇到问题...
看到我想将搜索查询保存到数据库中,
看这个例子
搜索的Stackoverflow =日期中的> 20次=> 2013-04-26
搜索的Stackoverflow =日期的> 10倍=> 2013-04-27
搜索的Stackoverflow =日期中的> 50次=> 2013-04-28
格式无所谓。实际上,如果日期更改,我实际上想保存搜索查询。
如果日期匹配,那么应该更新时间+1
看到这段代码,
<?php
$keyword = null;
$date = null;
if (!empty($_GET['s'])) {
$keyword = stripslashes($_GET['s']);
$date = date("Y-m-d");
try {
$objDb = new PDO('mysql:dbname=search;charset=UTF-8', 'root', '');
$check = "SELECT *
FROM `search1`
WHERE `keyword` = '$keyword%'
AND `date` = CURDATE() ";
if (!empty($check))
{
$sql ="UPDATE `search1`
SET `times` = `times` + 1
WHERE `keyword` = '$keyword%'
AND `date` = CURDATE()";
}
else
{
$sql = "INSERT INTO `search1` (`keyword`, `date`) VALUES (:keyword, :date)";
$statement = $objDb->prepare($sql);
$statement->execute(array(':keyword' => $keyword, ':date' => $date));
}
} catch(PDOException $e) {
echo $e->getMessage();
}
}
?>
它不起作用..出了点问题。.有人可以告诉我什么地方出了问题。
我不能使用主键。
最佳答案
您可以在字段日期和关键字上设置唯一索引
ALTER TABLE `search1` ADD UNIQUE (
`keyword` ,
`date`
);
编辑:看起来OP现在已经有了它,但是为了完整性,您只运行了一次以上查询即可向表中添加唯一索引-请注意,如果您的行具有相同的关键字值,则该查询将不起作用和日期;如果出现“重复值”错误,则必须删除行,直到值唯一为止,然后再试一次。
然后查询
INSERT INTO `search1` (`keyword`, `date`, `times`) VALUES (:keyword, :date, 1) ON DUPLICATE KEY UPDATE `times` = `times` + 1
应该做到这一点:)