2014-04-17 173 views
0
<?php 
include("db.php"); 
$name=$_REQUEST['name']; 
$mail=$_REQUEST['email']; 
$yname=$_REQUEST['yname']; 
$result=mysql_query("SELECT * FROM information WHERE uname = '$name' "); 

if (mysql_num_rows($result) == 0) { 

    $query=mysql_query("INSERT into noresult (Serial,searchname,yourname,email) 
     VALUES ('',$name','$yname','$mail')"); 
    if ($query){ 
     header('Location:nullresult.php'); 
    } 
    else{ 
     echo "Query failure"; 
    } 

} 

?> 

这会返回'查询失败'。它有时会与表名“寻求者”一起工作。然后我放弃它,并创建一个新表'noresult',因为前一个有点搞砸了。突然查询失败。MySQL查询未执行

注意:寻道者和noresult有相同的列。

+0

**通过构建带有外部变量的SQL语句,您可以开放给SQL注入攻击。**此外,任何带有单引号的输入数据,如名称“O'Malley”,都会炸毁您的SQL查询。请了解使用参数化查询(最好是使用PDO模块)来保护您的Web应用程序。 [这个问题](http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php)有很多例子的细节。您也可以查看http://bobby-tables.com/php查找危险的替代方案和解释。 –

+1

谢谢。不知道这些。作为初学者,我的主要目标是看我是否可以实现某些事情。下次会处理这些问题。 –

+0

使用预准备语句的另一大好处是,您不会遇到上面遇到的引用问题。 –

回答

2

你错过了一个单引号中查询:

$query=mysql_query("INSERT into noresult (Serial,searchname,yourname,email) 
    VALUES ('','$name','$yname','$mail')"); 
     there----^ 
+0

如果这不能立即解决问题,我会仔细检查'Serial'和'serial'的外壳。 +1 –

+0

从[MySQL文档](http://dev.mysql.com/doc/refman/4.1/en/identifier-case-sensitivity.html):“列和索引名称在任何平台上都不区分大小写,也不是列别名。“但是,表名在某些平台上区分大小写,因此您可能需要检查'noresult'。 – larsAnders

+0

没有套管的问题。我尝试了'serial'和'Serial'。 –

0

试试这个更新查询 -

$query=mysql_query("INSERT into noresult (Serial,searchname,yourname,email) 
     VALUES ('','".$name."','".$yname."','".$mail."')"); 

还要检查表noresult所有列名。