我试图在用户点击文件one.php中的链接后将数据插入数据库。所以文件two.php包含以下代码:
$retrieve = "SELECT * FROM catalog WHERE id = '$_GET[id]'";
$results = mysqli_query($cnx, $retrieve);
$row = mysqli_fetch_assoc($results);
$count = mysqli_num_rows($results);
因此,上面的查询将使用$_GET[id]
作为参考从数据库获取信息。
执行此操作后,我想使用以下代码插入在不同表中检索的信息:
$id = $row['id'];
$title = $row['title'];
$price = $row['price'];
$session = session_id();
if($count > 0) {
$insert = "INSERT INTO table2 (id, title, price, session_id)
VALUES('$id', '$title', '$price', '$session');";
}
第一个查询$retrieve
正在运行,但第二个$insert
没有。你知道为什么会这样吗? PS:我知道我需要消毒并使用PDO和准备好的声明,但是我想先测试一下,它不起作用,我不知道为什么。谢谢你的帮助
答案 0 :(得分:1)
您没有执行查询:
$insert = "INSERT INTO table2 (id, title, price, session_id)
VALUES('$id', '$title', '$price', '$session');";
}
它需要使用mysqli_query()
与数据库连接一样,并确保使用session_start();
启动会话,看到您正在使用会话。
$insert = "INSERT INTO table2 (id, title, price, session_id)
VALUES('$id', '$title', '$price', '$session');";
}
$results_insert = mysqli_query($cnx, $insert);
基本上
...加
您目前的代码向SQL injection开放。使用mysqli
with prepared statements或PDO with prepared statements。
如果仍然无法正常工作,那么MySQL可能会抱怨某些内容,因此您需要转义数据并检查错误。
旁注:
使用mysqli_affected_rows()
检查INSERT是否真的成功。
答案 1 :(得分:0)
如果您计划将来使用PDO,请参阅PDO中的查询示例。
$sql = $pdo->prepare("INSERT INTO table2 (id, title, price, session_id) VALUES(?, ?, ?, ?");
$sql->bindParam(1, $id);
$sql->bindParam(2, $title);
$sql->bindParam(3, $price);
$sql->bindParam(4, $session_id);
$sql->execute();
我们如何更安全。