2013-06-13 3 views
0

Мне нужна помощь в выяснении, почему следующий запрос DB не работает. Я знаю, что соединение с БД хорошее. Я также знаю, что $referralname = $_SESSION['user_name']; правильно выполняет рендеринг. Это должно быть что-то с моим кодом.Не удается получить информацию о БД

Я получаю следующие ошибки. Может быть, это поможет понять это.

[12-Jun-2013 21:13:54 America/New_York] PHP Warning: mysql_query() expects parameter 1 to be string, object given in /x/x/public_html/americansolar/partner/classes/Referral.php on line 89 
[12-Jun-2013 21:13:54 America/New_York] PHP Warning: mysql_num_rows() expects parameter 1 to be resource, null given in /x/x/public_html/americansolar/partner/classes/Referral.php on line 90 

P.S. Я не уверен, требуется ли утверждение while или нет, поскольку оно всегда будет возвращать только один результат ???

Мой код:

// creating a database connection 
$this->db_connection = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME); 

// if no connection errors (= working database connection) 
if (!$this->db_connection->connect_errno) { 


     $referralname = $_SESSION['user_name']; 


     // get the referrer's id 
     $query_get_referral_id = $this->db_connection->query("SELECT * From users WHERE user_name = '".$referralname."';"); 
     $result = MYSQL_QUERY($query_get_referral_id); 
     $numberOfRows = MYSQL_NUM_ROWS($result); 
     $i = 0; 
     while ($i<$numberOfRows) 
     { 
        $thisId = MYSQL_RESULT($result,$i,"user_id"); 

        $i++; 
      } 
} 

Мое решение:

$query_get_referral_id = $this->db_connection->query("SELECT * From users WHERE user_name = '".$referralname."';"); 
while($row = mysqli_fetch_array($query_get_referral_id)) 
    { 
     $thisId = $row['user_id']; 
    } 

ответ

3

Youre смешивания mysqli и mysql ... они совершенно разные и несовместимые интерфейсы. Во-вторых, ваш $query_get_referral_id не является значением id ... это mysqli_result object. Затем вам нужно извлечь значение из этого объекта.

И, наконец ... не использовать mysql ... придерживаться mysqli или использовать PDO


Также вы должны использовать prepared statement для этого:

$stmt = $this->db_connection->query("SELECT user_id From users WHERE user_name = ?"); 
$stmt->bind_param('s', $referralname); 
$stmt->execute(); 

if($stmt->num_rows) { 

    $stmt->bind_result($userId); 

    while($stmt->fetch()) { 
     // do something with $userId... 
     // each iteration of this loop is a 
     // row of the result set, it will automatically 
     // load the value of the user_id into $userId 
    } 
} 
+0

Ahh, который объясняет многое :) Так что же мне нужно изменить, чтобы сохранить формат mysqli_result? '$ result = MYSQL_QUERY ($ query_get_referral_id);' –

+0

Смотрите мое обновление ... – prodigitalson

+0

Спасибо prod! Можете ли вы подробнее объяснить, как поместить строку user_id в переменную внутри цикла while? Кроме того, нет необходимости цитировать это с помощью переменной '$ i ++'? Извините, просто привык к старым способам этого делать :) –

0

Я думаю, что вы выигрыш должны запрос, как

$query_get_referral_id = $this->db_connection->query("SELECT * From users WHERE user_name = '".$referralname."';"); 
$result = MYSQL_QUERY($query_get_referral_id); 

Ну, вы должны g o

$result = $this->db_connection->query("SELECT * From users WHERE user_name = '".$referralname."';"); 
Смежные вопросы