Тестирование, если Выборочный запрос нашел результаты - PullRequest
1 голос
/ 01 декабря 2010

Привет, я новичок в PHP и буду очень признателен, если кто-нибудь скажет мне, где я ошибаюсь в этом коде. Чтобы поместить код в контекст, я использую Facebook для аутентификации пользователей и добавляю их регистрационные данные в базу данных моего приложения. В следующем коде намеревается проверить, существует ли пользователь в базе данных, и если нет, добавить его. По какой-то причине я не могу проверить $result

Я проверил переменные запроса, и они выводятся без проблем

@ $con = new mysqli('localhost', 'username', 'password', 'database');
if(mysqli_connect_errno()){
    echo 'Error: Could not connect to the database. Please try again later';
    exit;
}

$query = "SELECT * FROM users WHERE oauth_provider = 'facebook' AND oauth_uid ='".$uid."'";

$result = $con->query($query);


if($result === FALSE){
    $insertquery = "INSERT INTO ('oauth_provider', 'oauth_uid', 'username') VALUES ('facebook', '".$uid."', '".$username."')";
    $result = $con->query($query);
}

Я, вероятно, должен добавить, что у меня есть код, работающий с использованием более старого подхода mysql. Но я читал, что лучше использовать объектно-ориентированный подход mysqli.

Вот старый рабочий код

if($session){
$con = mysql_connect('localhost', 'user', 'password');
$select_db = mysql_select_db('database');

if(!$con || !$select_db){
    die('Could not connect: ' . mysql_error());
}
else{
    echo "connected to database and table selected";
}

$query = mysql_query("SELECT * FROM users WHERE oauth_provider = 'facebook' AND oauth_uid = ". $user['id']);
$result = mysql_fetch_array($query);

if(empty($result)){
    $query = mysql_query("INSERT INTO users (oauth_provider, oauth_uid, username) VALUES ('facebook', {$user['id']}, '{$user['name']}')");
    $query = mysql_query("SELECT * FROM users WHERE id = " . mysql_insert_id());
    $result = mysql_fetch_array($query);
}

}

Любая помощь, которую вы можете мне оказать, приветствуется.

Ответы [ 3 ]

2 голосов
/ 01 декабря 2010

Это можно сделать так же просто:

if($result)
{
// Do code when there are results
} else {
// Do code when there are no results
}
2 голосов
/ 01 декабря 2010

Используйте свойство MySQLi_Result::num_rows , чтобы получить количество строк MySQLi_Result объекта :

if ($result->num_rows > 0) {
    // …
}
1 голос
/ 01 декабря 2010
if( $result instanceof mysqli_result && $result->num_rows==0)

break down:

$result instanceof mysqli_result

это для обеспечения прохождения запроса и возврата результатов

$result->num_rows==0

это для проверки предыдущего запроса на соответствие любым существующим записям

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...