我正在尝试制作一个基本的点击计数器,我可以在我的所有网站上使用。
我有一个准备好的语句查询我的Go Daddy MySQL服务器以及我的MAMP MySQL服务器,并且该语句不会'准备'。这是:
function hit_counter($url){
if($mysqli = new mysqli('localhost', 'root', '', 'DB')){
$crack = "SELECT hc-id, hc-url, hc-unique_hits, hc-total_hits, hc-last_viewed FROM hit_counter WHERE hc-url =?";
if($stmt = $mysqli->prepare(crack)){
$stmt->bind_param('s', $url);
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($id, $url, $unique_hits, $total_hits, $last_viewed);
$stmt->fetch();
echo "the statement was prepared successfully";
$total_hits = $total_hits+1;
$last_viewed = date('l jS \of F Y h:i:s A');
echo $unique_hits;
if($unique === true){
$unique_hits = $unique_hits+1;
}
$update = 'UPDATE hit_counter set hc-unique_hits=? hc-total_hits=? hc-last_viewed=? WHERE hc-url=?';
if($stmt= $mysqli->prepare($update)){
$stmt->bind_param('iiss', $unique_hits, $total_hits, $last_viewed, $url);
$stmt->execute();
}else{echo "the update statement wasn't prepared.";}
}else{echo "The statement wasn't prepared.";}
}else{echo "the SQL connection wasn't made";}
}
我知道它正在连接到数据库,但每当我运行脚本时,它都会回显if($stmt = $mysqli->prepare(crack)){ "The Statement wasn't prepared"
的else语句。
答案 0 :(得分:3)
您的列包含连字符,MySQL将其解释为hc
MINUS unique_hits
等等,以为您想要解决数学问题。
您的SET中也缺少逗号
UPDATE hit_counter set `hc-unique_hits`=?, `hc-total_hits`=?, `hc-last_viewed`=? WHERE `hc-url`=?
最好不要使用连字符作为列名。请改用下划线。
使用
if(!$stmt->execute()){trigger_error("there was an error....".$mysqli->error, E_USER_WARNING);}
会发现这个错误。
同样的事情
$crack = "SELECT hc-id, hc-url, hc-unique_hits, hc-total_hits, hc-last_viewed FROM hit_counter WHERE hc-url =?";
在包含连字符的那些附近使用反引号。
$crack = "SELECT `hc-id`, `hc-url`, `hc-unique_hits`, `hc-total_hits`, `hc-last_viewed`
FROM hit_counter WHERE `hc-url` =?";
有关标识符限定符的更多信息,请参阅:
另外
if($stmt = $mysqli->prepare(crack)){
应该是
if($stmt = $mysqli->prepare($crack)){
您错过了$
的{{1}}。否则,它被视为常数。
将错误报告添加到文件的顶部,这有助于查找错误。
crack
旁注:错误报告应仅在暂存时完成,而不是生产。
另一种可供您使用的开发工具是var_dump()
。
使用<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// rest of your code
查看通过的内容。
答案 1 :(得分:1)
请参阅值if($stmt = $mysqli->prepare(crack)){
$crack
,发现 $ !!