因此,当有人按下此链接时,它应该将该文本ID中的所有数据插入到新表中,但是使用点击它的用户名和用户按下的文本的ID。
问题是,当用户点击链接时,它没有插入数据,可能出现什么问题?
会话有效,所以它一定是GET的东西吗?
<?php
if(isset($_GET['collect'])) {
$perman = $_GET['collect'];
$username = $_SESSION['username'];
$query = $dbh->query("INSERT INTO collections (id, ad, user) VALUES ('', $perman, $username)");
echo 'Saving';
echo $perman;
header ('Refresh: 1; URL=http://localhost/de/collect.php');
}
&GT;
答案 0 :(得分:0)
首先,插入&#39;&#39;对于ID不是很好(不知道它是否有效),不使用它(使用默认值),或插入NULL(如果NOT NULL也使用默认值)。 其次,要插入值,最好将其引用并在其上使用escape_string。我认为这是你的问题。
$query = $dbh->query("INSERT INTO collections (ad, user) VALUES ('" . $dbh->escape_string($perman) . "', '" . $dbh->escape_string($username) . "')");
答案 1 :(得分:0)
您使用“PDO”标记了您的问题。你在使用PDO吗?如果是,为什么不使用bindParam()或bindValue()?
如果$ perman和$ username是字符串,你就要逃避它们:
$query = $dbh->query("INSERT INTO `collections` (`id`, `ad`, `user`) VALUES ('', '{$perman}', '{$username}')");
该查询应该有效,但仍存在安全问题。你要逃避价值观。使用PDO非常简单。
常规:使用http://php.net/manual/en/function.mysql-error.php
你的列“id”应该是Integer并且有一个auto_increment。当然有些ID是字符串,但如果你能够避免它,请避免使用它!
您可以使用
打印$ _GET参数print_r($_GET);
修改强> PDOStatement :: bindValue()的示例:
$stmt = $dbh->prepare("INSERT INTO `collections` (`id`, `ad`, `user`) VALUES (:id, :ad, :user)");
$stmt->bindValue(":id", 123);
$stmt->bindValue(":ad", "ad");
$stmt->bindValue(":user", "username");
$stmt->execute();
答案 2 :(得分:0)
你应该这样做......如果你正在使用PDO
更安全,准备好的陈述
$sql = "INSERT INTO books (id,ad,user) VALUES (:id,:ad,:user)";
$q = $conn->prepare($sql);
$q->execute(array(':id'=>null,':ad'=>$perman,':user'=>$username));