我想知道为什么下面的代码无法将我的数据添加到数据库中,没有任何错误消息。
trans_id是INT(11)数据类型,subject和useid是VARCHAR(45)。
$con = mysql_connect("localhost","user","pass");
if (!$con)
{
die('Could not connect to the database! ' . mysql_error());
}
//Accessing the database
$db_selected = mysql_select_db("ebook", $con);
if (!$db_selected) {
die ('Database error!' . mysql_error());
}
else
mysql_query($con, "INSERT INTO free_chapters (trans_id, subject, useid) VALUES ($transactionId, 'Chemistry', $useid)");
答案 0 :(得分:2)
首先,您不应该使用mysql_*
函数,因为它们已过时,并且存在巨大的安全风险,因此请了解mysqli_
或PDO
第二,mysql_query()
应该将dsn
作为第二个参数,而不是第一个参数。意味着您需要更改为mysql_query('your statement', $conn)
但是您正在执行此操作opposite`
答案 1 :(得分:1)
mysql_query中的params顺序错误。 它应该是:
mysql_query ( string $query [, resource $link_identifier = NULL ] );
或在你的情况下:
mysql_query("INSERT INTO free_chapters (trans_id, subject, useid)
VALUES ($transactionId, 'Chemistry', '$useid')", $con);
你应该停止使用mysql_ extension,因为:
This extension is deprecated as of PHP 5.5.0,
and will be removed in the future. Instead, the MySQLi or PDO_MySQL
extension should be used. See also MySQL: choosing an API guide and
related FAQ for more information.
答案 2 :(得分:0)
试试这个......
mysql_query("INSERT INTO free_chapters (trans_id, subject, useid) VALUES ($transactionId, 'Chemistry', '" . $useid . "')", $con);
在过度热心的坚果攻击之前,让我们知道mysql是不安全的,已弃用并且可能导致你的小屋过早破坏。尽量远离它。
答案 3 :(得分:0)
mysql_query($con, "INSERT INTO free_chapters (trans_id, subject, useid) VALUES ($transactionId, 'Chemistry', $useid)");
应该是:
mysql_query($con, "INSERT INTO free_chapters (trans_id, subject, useid) VALUES ('$transactionId', 'Chemistry', '$useid')"
使用mysqli_ *代替mysql _ *。
试试这个
答案 4 :(得分:0)
(我之前的其他人按参数顺序捕获了错误) 更改后,您可能想要更改:
mysql_query("INSERT INTO free_chapters (trans_id, subject, useid) VALUES ($transactionId, 'Chemistry', $useid)", $con);
要:
$res = mysql_query("INSERT INTO free_chapters (trans_id, subject, useid) VALUES ($transactionId, 'Chemistry', $useid)", $con); if (!$res) { die('Error during insert: ' . mysql_error()); }
这应该会从数据库中提供错误消息,您可以解决任何其他问题。
当然:
使用此查询解决问题后,您可能希望停止使用已弃用的API并开始使用MySQLi或PDO_MySQL。如果$ transactionId或$ useid未正确转义/清理,则您的代码容易出现SQL注入攻击。