-1

我想知道为什么下面的代码无法将我的数据添加到数据库中,没有任何错误消息。

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)");
4

5 回答 5

2

首先你不应该使用mysql_*函数,因为它们已经过时,并且存在巨大的安全风险,所以请了解mysqli_PDO

第二,mysql_query()应该把dsn 当作第二个参数,而不是第一个。意味着你需要改变,mysql_query('your statement', $conn)但你正在做相反的事情`

于 2013-09-08T10:51:09.373 回答
1

您在 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.
于 2013-09-08T10:52:00.147 回答
0

尝试这个...

mysql_query("INSERT INTO free_chapters (trans_id, subject, useid) VALUES ($transactionId, 'Chemistry', '" . $useid . "')", $con);

在过分热心的坚果攻击之前,让人们知道 mysql 是不安全的、已弃用的,并且可能导致您的小屋过早损坏。尽量远离它。

于 2013-09-08T10:50:22.447 回答
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_*。

尝试这个

于 2013-09-08T10:51:25.153 回答
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);
如果 (!$res) {
    die('插入时出错:' . mysql_error());
}

这应该会给您来自数据库的错误消息,您可以解决任何其他问题。

而且当然:

使用此查询解决问题后,您可能希望停止使用已弃用的 API 并开始使用 MySQLi 或 PDO_MySQL。如果 $transactionId 或 $useid 未正确转义/清理,您的代码很容易受到 SQL 注入攻击。

于 2013-09-08T10:57:58.120 回答