我在网站的管理员端有一个短脚本,可以上传和映像或上传到数据库的链接。我最近将网站从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.");
}
答案 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。