2014-11-12 5 views
2

Я пытаюсь вставить некоторую информацию в одну из моих таблиц db. Вот мой код:Почему мой метод INSERT INTO возвращает false?

function insertUser(){ 
    $con = db_connect(); 
    $response = array(); 

    if(empty($_REQUEST['firstname'])){ 
     $fnam = ""; 
    }else{ 
     $fnam = $_REQUEST['firstname']; 
    } 

    if(empty($_REQUEST['lastname'])){ 
     $lnam = ""; 
    }else{ 
     $lnam = $_REQUEST['lastname']; 
    } 

    if(empty($_REQUEST['age'])){ 
     $age = ""; 
    }else{ 
     $age = $_REQUEST['age']; 
    } 

    if(empty($_REQUEST['sex'])){ 
     $sex = ""; 
    }else{ 
     $sex = $_REQUEST['sex']; 
    } 

    if(empty($_REQUEST['location'])){ 
     $loc = ""; 
    }else{ 
     $loc = $_REQUEST['location']; 
    } 

    if(empty($_REQUEST['education'])){ 
     $edu = ""; 
    }else{ 
     $edu = $_REQUEST['education']; 
    } 

    //check if username forgot 
    if(empty($_REQUEST['username'])){ 
     $response[] = "Please fill username box"; 
    }else{ 
     $uname = $_REQUEST['username']; 
     //check if username is existed 
     $isExisted = mysqli_query($con, "SELECT * FROM tbl_users WHERE username = '$uname'"); 
     if(mysqli_num_rows($isExisted) > 0){ 
      $response[] = "Username is Existed"; 
      } 
     } 

    //check if password forgot 
    if(empty($_REQUEST['password'])){ 
     $response[] = "Please fill password box"; 
    } else{ 
     $pass = $_REQUEST['password']; 
    } 

    if(empty($response)){ 
     //$password = getHash($password); 
     $res = mysqli_query($con, "INSERT INTO tbl_users (firstnam, lastname, age, sex, location, education, username, password, created_at) VALUES ('$fnam', '$lnam', '$age', '$sex', '$loc', '$edu', '$uname', '$pass', NOW())"); 
     // user stored successfully 
     if ($res) { 
      $response[] = "user stored successfully"; 
     } 
    } 

    echo json_encode($response); 
    mysqli_close($con); 
} 

и вот подключение к моей БД, что я могу прочитать данные с помощью этого:

function db_connect(){ 
    $con = mysqli_connect("localhost", "root", "", "ketabha"); 
    mysqli_set_charset($con, 'utf8'); 
    if (mysqli_connect_errno()) { 
     echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
    } 

    return $con; 
} 

имя таблицы и имя каждого столбца правильно, но доза не работает! и когда я echo json_encode($res);, он показывает false в моем браузере. не могли бы вы мне помочь, пожалуйста?

+2

'false' означает, что запрос получил ошибку. Используйте 'echo mysqli_error ($ con)', чтобы увидеть сообщение об ошибке. – Barmar

+2

Вместо использования 'echo json_encode ($ res);', вы должны использовать 'или die (mysqli_error ($ con))' для получения «реальной» ошибки. http://php.net/manual/en/function.error-reporting.php не повредит ни. –

+3

Вы должны использовать 'bind_param()' вместо переменной подстановки. Вероятно, одна из переменных содержит цитату, и она вызывает синтаксическую ошибку. – Barmar

ответ

3

несколько комментариев, чтобы ответить, чтобы закрыть этот вопрос и будет помечена как решить:

избежать данных с использованием как stripslashes() и mysqli_real_escape_string() функции.

Еще лучше, используйте prepared statements, или PDO with prepared statements.

Это число из многих комментариев, обменянных на протяжении всего периода времени, например, ваш столбец created_at будет DATETIME для вашей функции NOW() MySQL.

Другой - это то, что я считал ошибочным названием колонки, являющимся firstnam, которое, как я подозревал, было firstname.

Что касается ошибок на французском языке; это потому, что для файла .ini для SQL установлено значение lc-messages=fr_FR, которое необходимо изменить на lc-messages=en_GB, так как вы используете Wampserver, это то, что нужно сделать, чтобы получить сообщения на английском языке.

Язык, используемый по умолчанию для Wamp, установлен на французский язык в его MySQL, странно достаточно.

Вместо того, чтобы использовать echo json_encode($res);, вы должны использовать or die(mysqli_error($con)), чтобы получить «реальную» ошибку.

Затем вы можете вернуться к использованию echo json_encode($res);, если у вас есть код без ошибок.

+0

Я не мог найти проблему без этой функции, большое спасибо вам и Barmar. –

+0

@NiloofarHakkaki Вы очень желанны. –

+1

@NiloofarHakkaki Маленький (и юмористический) справочник по SQL Injection: http://bobby-tables.com Я предлагаю вам прочитать его, чтобы полностью понять, почему рекомендация Фреда об использовании подготовленных заявлений действительно является идеей gooooooooood – Barranka

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