2014-04-17 5 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 не исполняется

Примечание: Искатели и нерезиденты имеют одинаковые столбцы.

+0

** При создании операторов SQL с внешними переменными вы остаетесь открытыми для атак SQL-инъекций. ** Кроме того, любые входные данные с одинарными кавычками в нем, такие как имя «O'Malley», взорвут ваши SQL-запрос. Пожалуйста, узнайте об использовании параметризованных запросов, желательно с модулем PDO, для защиты вашего веб-приложения. [Этот вопрос] (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-

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

также проверить все имя столбца из таблицы noresult.

Смежные вопросы