PHP脚本不将数据写入数据库

时间:2016-07-02 03:35:06

标签: php mysql

我从另一个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);

基本上我希望将此脚本收集的所有数据放入我的数据库中。但是,无论我键入什么,即使我将变量更改为文本,也不会将任何内容写入数据库。我可以使用另一个脚本从数据库中读取,但是我无法通过这个来向db添加任何信息。有没有我似乎无法找到的拼写错误?

我只想了解访问该网页的任何人的信息。

编辑:我试图填写名为" host_name"的字段,但在我的数据库中它有一个不同的名称。这里显示的原始脚本不会显示错误,我也没有检查过我的所有字段是否按顺序排列。那是错误。

2 个答案:

答案 0 :(得分:0)

许多可能性:

  1. 如果用户user具有读取权限但没有对数据库或表的写权限,则读取操作将成功,但写入操作将失败。
  2. 如果这是MyISAM表,则该表可能被另一个进程锁定。读取操作可行,但写入操作不会
  3. 也许您尝试写入的表格或字段不存在或拼写错误
  4. 更改...

    $test=mysql_query($strSQL);
    

    为...

    if(!$test=mysql_query($strSQL)) die(mysql_error());
    

    它将显示操作失败的原因(docs)。

    另外,如果你开始不使用MySQL功能。他们正在从PHP中删除,因此您将来会给自己做更多的工作。请改为使用MySQLiPDO_MySQLdocs)。

    最后,从不只是在SQL查询中插入从浏览器中获取的文本。用户可以将$_SERVER['HTTP_REFERER']$_SERVER['HTTP_USER_AGENT']的值操作为任何内容,包括一个字符串,使您可以执行用户想要的任何查询(删除表格,删除数据......)。了解预备语句参数化查询并使用它们

答案 1 :(得分:0)

回应这一行:

>>> from urllib.parse import urlparse
>>> url = "http://supremecosts.com/contact-us/"
>>> obj = urlparse(url)
>>> obj
ParseResult(scheme='http', netloc='supremecosts.com', path='/contact-us/', params='', query='', fragment='')
>>> obj.geturl()
'http://supremecosts.com/contact-us/'
>>> obj.netloc
'supremecosts.com'

并在SQL控制台上运行它。寻找错误并确保传入值。