不从链接向数据库插入数据

时间:2013-06-19 16:37:34

标签: php pdo

因此,当有人按下此链接时,它应该将该文本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;

3 个答案:

答案 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));