2015-06-16 3 views
1

В моем коде есть два разных запроса. Первый работает, и я имею в виду, что он идет по пути if. Проблема связана со второй, которая идет по пути else.Два запроса в одном файле php, один не работает - почему?

$adding_user_email=$arr[1]; 
$sessionuserid=$_SESSION['login_user_id']; 
$servername = "localhost"; 
$username = "root"; 
$password = ""; 
$dbname = "company"; 
$conn = new mysqli($servername, $username, $password, $dbname); 

if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 

$sql = "INSERT INTO modes (userid,modename) VALUES ('$sessionuserid','".$arr[0]."')"; 
$sqlmodeid_uderid = "SELECT userid FROM register where useremail='".$arr[1]."'"; 

if ($conn->query($sql) === TRUE) { 
    echo "New record created successfully"; 
} else { 
    echo "Error: " . $sql . "<br>" . $conn->error; 
} 

$sqlmodeid_uderid = "SELECT userid FROM register where useremail='$adding_user_email'"; 
if ($conn->query($sqlmodeid_uderid) === TRUE) { 
    echo "userid fetched successfully"; 
} else { 
    echo "Error: " . $sqlmodeid_uderid . "<br>" . $conn->error; 
} 

$conn->close(); 

Помогите мне. (Запрос работает нормально)

+0

Начните с print_r'ing переменных вы пытаетесь сравнить в if, чтобы узнать, какова его ценность. – Martin

+0

, который ценит вас, прося меня сравнить '$ sqlmodeid_uderid' или что .. пожалуйста, уточните ... – Vicky

+0

Обратите внимание на [Как использовать соединение] (http://www.w3schools.com/php/php_mysql_select.asp). Это поможет вам. Проверьте соединение один раз сверху, как показано в ссылке. – user1885057

ответ

2

условие является проблемой:

$conn->query($sqlmodeid_uderid) === TRUE 

Если мы обратимся к documentation для функции query мы увидим:

Возвращает FALSE при неудаче. Для успешных запросов SELECT, SHOW, DESCRIBE или ВОПРОСЫ EXPLAIN mysqli_query() вернет объект mysqli_result. Для других успешных запросов mysqli_query() вернет TRUE.

Как вы имеете дело с SELECT запроса, этот вызов никогда не вернется true. Он вернет объект mysqli_result при успешном завершении и false при сбое.

Вместо этого вы можете переписать это условие несколькими способами.

  1. Отметьте, что запрос не возвращается false.

    if ($conn->query($sqlmodeid_uderid) !== FALSE) { 
    
  2. == Используйте вместо ===. Первый будет отбрасываться между двумя разными типами (и объект mysqli_result будет равен true при литье в bool), тогда как === выполняет сравнение типов, что означает, что условие будет выполнено только в том случае, если оба операнда одного типа и имеют одинаковое значение.

    if ($conn->query($sqlmodeid_uderid) == TRUE) { 
    
  3. Та же логика в пункте 2, может быть начертано несколькими различными способами:

    if ($conn->query($sqlmodeid_uderid)) { 
    
    if ((bool)$conn->query($sqlmodeid_uderid)) { 
    

Я хотел бы посмотреть на документацию php.net на операторов сравнения для получения дополнительной информации по этому вопросу :

http://php.net/manual/en/language.operators.comparison.php

0

Используйте код, как это ...

$adding_user_email=$arr[1]; 
        $sessionuserid=$_SESSION['login_user_id']; 
        $servername = "localhost"; 
         $username = "root"; 
         $password = ""; 
         $dbname = "company"; 
         $conn = new mysqli($servername, $username, $password, $dbname); 
         if ($conn->connect_error) { 
          die("Connection failed: " . $conn->connect_error); 
         } 
          $sql = "INSERT INTO modes (userid,modename) VALUES ('$sessionuserid','".$arr[0]."')"; 
          $sqlmodeid_uderid = "SELECT userid FROM register where useremail='".$arr[1]."'"; 

          $sqlmodeid_uderid = "SELECT userid FROM register where useremail='$adding_user_email'"; 
0

Для второго запроса, я думаю, что вы должны сделать, как это вместо того, чтобы делать «=== ИСТИНА»

$sqlmodeid_uderid = "SELECT userid FROM register where useremail='$adding_user_email'"; 

/* Select queries return a resultset */ 
if ($result = $conn->query($sqlmodeid_uderid)) { 
    echo "userid fetched successfully"; 
} else { 
    echo "Error: " . $sqlmodeid_uderid . "<br>" . $conn->error; 
} 

Посмотрите на примеры в док: http://php.net/manual/en/mysqli.query.php

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