新的db import,mysql_insert_id()返回0

时间:2014-01-29 15:38:17

标签: php mysql upload

我在网站的管理员端有一个短脚本,可以上传和映像或上传到数据库的链接。我最近将网站从hostpapa服务器移动到godaddy服务器。这个脚本在hostpapa上运行得很好。导入godaddy服务器后只上传图像工作。上传链接失败,id返回0.奇怪的是因为auto_increment已设置并且上传图片证明auto_increment工作得很好。不确定为什么id为链接上传返回0,当我尝试上传链接时没有任何内容被插入到数据库中。

include '../connect.php';

if ($_POST['upload'])
{
//get file attributes.
$name = $_FILES['myfile']['name'];
$tmp_name = $_FILES['myfile']['tmp_name'];
$title = $_POST['title'];
$url = $_POST['url'];
$type = $_POST['type'];


if ($name)
{
 $location = "imgs/$name";
 $dir = "../imgs/$name";
 move_uploaded_file($tmp_name,$dir);

$query = mysql_query("INSERT INTO `links` VALUES ('','$title','','$location','$type')");
//last id
$id = mysql_insert_id();
    echo $id,$location,$title;
 die ("Image successfully uploaded.");

}

//this bit below is what doesn't work as it should.
$query = mysql_query("INSERT INTO `links` VALUES ('','$title','$url','','$type')");
//last id
$id = mysql_insert_id();
    echo $id,$url,$title;
 die ("Link successfully loaded.");

}

2 个答案:

答案 0 :(得分:0)

magic quotes几乎可以肯定你的问题。默认情况下,GoDaddy启用魔术引号,这很容易破坏您的查询,尤其是因为您只将数据包装在'中,并且不会对输入进行任何转义。尝试通过将其置于脚本的顶部来关闭魔术引号,问题应该消失。

if (get_magic_quotes_gpc()) {
    function magicQuotes_awStripslashes(&$value, $key) {
        $value = stripslashes($value);
    }
    $gpc = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST);
    array_walk_recursive($gpc, 'magicQuotes_awStripslashes');
}

此外,您应该知道mysql_*已被弃用且不安全 - 您应该使用MySQLi或PDO。

最后,您对SQL注入非常开放。你说这是网站的管理区域,但你不能假设没有什么不好的东西会进入这个页面。对查询中使用的每个变量使用预准备语句或至少mysql_real_escape_string()

答案 1 :(得分:0)

感谢@Ed Cottrell和他建议使用:

echo mysql_errno().": ".mysql_error();

我能够看到错误是没有使用 - mysql_real_escape_string,因为错误弹出是一个语法错误,因为链接的标题包含撇号。

在变量中实现mysql_real_escape_string解决了问题。谢谢Ed。