Лучший способ получить результат подготовленного оператора MySQL с максимум одной строкой - PullRequest
0 голосов
/ 09 октября 2018

Я обычно использую этот код для чтения / получения результата подготовленного MySQL SELECT:

$sqlname = $conn->prepare("SELECT name FROM test1 WHERE test2 = ?");
$sqlname->bind_param('s',$test);
$sqlname->execute();
$result = $sqlname->get_result();
if ($result->num_rows > 0) {
    while($row = $result->fetch_assoc()) {   
        $testname = $row['name'];
    }
}

Но когда я знаю, что в результате будет только одна строка: Нужно ли использоватьв любом случае цикл с fetch_assoc или есть лучший способ?

1 Ответ

0 голосов
/ 09 октября 2018

Когда вы знаете имя столбца, который вы возвращаете в наборе результатов, вы можете привязать результат к выходной переменной - что, на мой взгляд, делает работу более приятной.

if (!$stmt = $conn->prepare("SELECT name FROM test1 WHERE test2 = ?")) {
    echo "Prepare Syntax Error"; // $conn->error
} elseif (!$stmt->bind_param("s", $test) || !$stmt->execute() || !$stmt->bind_result($name)) {
    echo "Statement Error"; // $stmt->error
} else {
    $stmt->fetch();
    var_export($name);  // this will show the value or NULL
}

Или, если вы не хотите связывать значение результата с переменной:

...
} elseif (!$stmt->bind_param("s", $test) || !$stmt->execute() || !$result = $stmt->get_result()) {
    echo "Statement Error"; // $stmt->error
} elseif (!$row = $result->fetch_row()) {  // No need to use assoc() keys
    echo "empty result";
} else {
    var_export($row[0]);  // access the first column value
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...