我想知道为什么下面的代码无法将我的数据添加到数据库中,没有任何错误消息。
trans_id 在 INT(11) 数据类型中,主题和 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)");
首先,您不应该使用mysql_*
功能,因为它们已经过时,并且存在巨大的安全风险,因此请了解mysqli_
或PDO
其次,mysql_query()
应将dsn
作为第二个参数,而不是第一个参数。这意味着你需要改成mysql_query('your statement', $conn)
但你做的恰恰相反。
mysql_query 参数顺序错误。它应该是:
mysql_query ( string $query [, resource $link_identifier = NULL ] );
或者在您的情况下:
mysql_query("INSERT INTO free_chapters (trans_id, subject, useid)
VALUES ($transactionId, 'Chemistry', '$useid')", $con);
您应该停止使用mysql_扩展,因为:
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.
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_*。
试试这个
试试这个...
mysql_query("INSERT INTO free_chapters (trans_id, subject, useid) VALUES ($transactionId, 'Chemistry', '" . $useid . "')", $con);
在过度热心的 nutsos 攻击之前,让我们知道 mysql 是不安全的、已弃用的,并且可能导致您的小屋过早变质。尽量远离它。
(在我之前的其他人在参数顺序上发现了错误)更改它们后,您可能需要更改:
mysql_query("插入free_chapters(trans_id、主题、使用ID)值($transactionId、'化学'、$useid)",$con);
自:
$res = mysql_query("插入free_chapters(trans_id,主题,使用ID)值($transactionId,'化学',$useid)",$con);如果 (!$res) { die('插入时出错: ' . mysql_error());}
这应该会给您来自数据库的错误消息,您可以解决任何其他问题。
当然:
解决此查询的问题后,您可能希望停止使用已弃用的 API 并开始使用 MySQLi 或 PDO_MySQL。如果$transactionId或$useid未正确转义/清理,则代码容易受到 SQL 注入攻击。