我从另一个 Stack Overflow 问题的答案中得到了这段代码 here .
我的数据库中有一个名为 track 的 mysql 表。
$server = "host";
$username = "user";
$password = "pass";
$database = "database";
$connId = mysql_connect($server,$username,$password) or die("Cannot connect to server");
$selectDb = mysql_select_db($database,$connId) or die("Cannot connect to database");
$tracking_page_name="example";
$ref=$_SERVER['HTTP_REFERER'];
$agent=$_SERVER['HTTP_USER_AGENT'];
$ip=$_SERVER['REMOTE_ADDR'];
$host_name = gethostbyaddr($_SERVER['REMOTE_ADDR']);
$strSQL = "INSERT INTO track (tm, ref, agent, ip, tracking_page_name, host_name) VALUES(curdate(),'$ref','$agent','$ip','$tracking_page_name','$host_name')";
$test=mysql_query($strSQL);
基本上,我希望将此脚本收集的所有数据都放入我的数据库中。但是,无论我键入什么,即使我将变量更改为文本,也不会向数据库写入任何内容。我可以使用另一个脚本从数据库中读取数据,但我无法让这个脚本向数据库中添加任何信息。是否有我无法找到的拼写错误?
我只想要有关访问此页面的任何人的信息。
编辑:我试图填写一个名为“host_name”的字段,但在我的数据库中它有一个不同的名称。此处显示的原始脚本不会显示错误,而且我也没有运行检查以查看我的所有字段是否按顺序排列。那是错误。
最佳答案
多种可能性:
- 如果用户
user
对数据库或表具有读取权限但没有写入权限,读取操作将成功,但写入操作将失败。 - 如果这是一个 MyISAM 表,该表可能被另一个进程锁定。读操作可以,但写操作不行
- 也许您要写入的表或字段不存在或拼写错误
改变...
$test=mysql_query($strSQL);
为了...
if(!$test=mysql_query($strSQL)) die(mysql_error());
它会告诉你操作失败的原因(docs)。
此外,如果您刚开始,请不要使用 MySQL
函数。它们已从 PHP 中删除,因此您只是给自己将来做更多的工作。请改用 MySQLi
或 PDO_MySQL
( docs )。
最后,永远不要只在 SQL 查询中插入从浏览器获得的文本。 $_SERVER['HTTP_REFERER']
和 $_SERVER['HTTP_USER_AGENT']
的值可以由您的用户操纵为任何内容,包括导致您执行的字符串用户想要的任何查询(删除你的表,泄露你的数据......)。了解准备好的语句和参数化查询并改用它们
关于PHP脚本不将数据写入数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38156234/