我创建了这个PHP页面,让人们互相关注它从表用户获取以下用户ID,当登录用户按下后,该操作应该保存在关注者表中。
followers table
id int
user_id int
follower-id int
users table
email varchar
id int
username varchar
password varchar
我收到此错误
:致命错误:带消息的未捕获异常'PDOException' 'SQLSTATE [42S22]:找不到列:1054未知列'追随者' C:\ socialnetwork \ classes \ DB.php中的“字段列表”:12堆栈跟踪:#0 C:socialnetwork \ classes \ DB.php(12):PDOStatement-> execute(Array)#1 C:\用户\卡里姆\桌面\ socialnetwork \ profile.php(17): DB :: query('SELECT follower ...',Array)#2 {main}引入 C:第12行的socialnetwork \ classes \ DB.php
感谢您的时间。
<?php
include('./classes/DB.php');
include('./classes/Login.php');
$username = "";
if (isset($_GET['username'])) {
if (DB::query('SELECT username FROM users WHERE username=:username', array(':username'=>$_GET['username']))) {
$username = DB::query('SELECT username FROM users WHERE username=:username', array(':username'=>$_GET['username']))[0]['username'];
if (isset($_POST['follow'])) {
$userid = DB::query('SELECT id FROM users WHERE username=:username', array(':username'=>$_GET['username']))[0]['id'];
$followerid = Login::isLoggedIn();
if (!DB::query('SELECT follower-id FROM `followers` WHERE user_id=:user_id', array(':user_id'=>$userid))) {
DB::query('INSERT INTO followers VALUES (null, :user_id, :follower-id)', array(':user_id'=>$userid, ':follower-id'=>(int)$followerid));
} else {
echo 'Already following!';
}
}
} else {
die('User not found!');
}
}
?>
<h1><?php echo $username; ?>'s Profile</h1>
<form action="profile.php?username=<?php echo $username; ?>" method="post">
<input type="submit" name="follow" value="Follow">
</form>
答案 0 :(得分:1)
连字符,即使不被禁止,也可能导致列名称出现问题。
为了使其工作,你必须用反尾标记括起列的名称:
SELECT `follower-id` FROM
正如MySQL文档所证实的那样:
不带引号的标识符中允许的字符:
ASCII:[0-9,a-z,A-Z $ _](基本拉丁字母,数字0-9,美元, 下划线)
扩展:U + 0080 .. U + FFFF
带引号的标识符中允许的字符包括完整的Unicode 基本多语言平面(BMP),U + 0000除外:
ASCII:U + 0001 .. U + 007F
扩展:U + 0080 .. U + FFFF
短划线-
的ASCII代码为45,位于&#34;带引号的标识符&#34; ASCII范围