PHP - простой способ прочитать одну запись из MySQL - PullRequest
56 голосов
/ 01 мая 2009

Как лучше всего использовать PHP для чтения одной записи из базы данных MySQL? E.g.:

SELECT id FROM games

Я пытался найти ответ на старые вопросы, но безуспешно.

Ответы [ 21 ]

57 голосов
/ 05 января 2011
$id = mysql_result(mysql_query("SELECT id FROM games LIMIT 1"),0);
31 голосов
/ 01 мая 2009
$link = mysql_connect('localhost','root','yourPassword')
mysql_select_db('database_name', $link);
$sql = 'SELECT id FROM games LIMIT 1';
$result = mysql_query($sql, $link) or die(mysql_error());
$row = mysql_fetch_assoc($result);
print_r($row);

В ответе ChrisAD не хватало нескольких вещей. После подключения к mysql важно выбрать базу данных, а также оператор die() позволяет видеть ошибки, если они возникают.

Будьте осторожны, это работает, только если у вас есть 1 запись в базе данных, потому что в противном случае вам нужно добавить WHERE id=xx или что-то подобное, чтобы получить только одну строку и не более. Также вы можете получить доступ к своему идентификатору, как $row['id']

21 голосов
/ 01 мая 2009

Используя PDO , вы можете сделать что-то вроде этого:

$db = new PDO('mysql:host=hostname;dbname=dbname', 'username', 'password');

$stmt = $db->query('select id from games where ...');
$id = $stmt->fetchColumn(0);
if ($id !== false) {
    echo $id;
}

Очевидно, что вам также следует проверить, выполняет ли PDO::query() запрос OK (либо проверяя результат, либо сообщая PDO, что вместо этого следует выдавать исключения)

14 голосов
/ 18 сентября 2012

Предполагая, что вы используете автоинкрементный первичный ключ, который является нормальным способом выполнения действий, вы можете получить доступ к значению ключа последней строки, которую вы поместили в базу данных:

$userID = mysqli_insert_id($link);

В противном случае вам нужно будет узнать больше информации о строке, которую вы пытаетесь найти, например, адрес электронной почты. Не зная структуру вашей таблицы, мы не можем быть более конкретными.

В любом случае, чтобы ограничить ваш запрос SELECT, используйте оператор WHERE, например: (Общий пример)

$getID = mysqli_fetch_assoc(mysqli_query($link, "SELECT userID FROM users WHERE something = 'unique'"));
$userID = $getID['userID'];

(конкретный пример) Или более конкретный пример:

$getID = mysqli_fetch_assoc(mysqli_query($link, "SELECT userID FROM users WHERE userID = 1"));
$userID = $getID['userID'];
7 голосов
/ 01 мая 2009

Внимание! Ваш SQL не является хорошей идеей, потому что он выберет все строки (никакое предложение WHERE не предполагает «WHERE 1»!) И засорит ваше приложение, если у вас есть большое количество строк. (Какой смысл выбирать 1000 строк, когда будет делать 1?) Поэтому вместо этого, при выборе только одной строки, убедитесь, что вы указали предложение LIMIT:

$sql = "SELECT id FROM games LIMIT 1";  // Select ONLY one, instead of all
$result = $db->query($sql);
$row = $result->fetch_assoc();
echo 'Game ID: '.$row['id'];

Это различие требует, чтобы MySQL выбрал только первую соответствующую запись, поэтому упорядочение таблицы важно, или вы должны использовать предложение WHERE. Однако найти эту запись намного меньше памяти и времени, чем получить каждую запись и вывести строку номер один.

4 голосов
/ 04 апреля 2016

Еще один ответ для объектно-ориентированного стиля. Нашел для меня это решение:

$id = $dbh->query("SELECT id FROM mytable WHERE mycolumn = 'foo'")->fetch_object()->id;

возвращает только один идентификатор. Убедитесь, что ваш дизайн гарантирует, что вы правильно выбрали.

4 голосов
/ 24 сентября 2016

Используйте LIMIT 1. это просто.

$rows = $db->query("select id from games LIMIT 1");
$row  =  $rows->fetch_object();
echo $row->id;
2 голосов
/ 02 мая 2009

Мне очень нравится философия библиотеки баз данных ezSQL , которая объединяет нативные методы SQL в более простой в использовании интерфейс.

Выбор одного значения из базы данных тривиален:

  $id = $db->get_var("SELECT id FROM games WHERE ...");

Это также упрощает выборку одной строки, столбца или набора строк.

2 голосов
/ 01 мая 2009

Самый простой способ - использовать mysql_result. Я скопировал часть кода из других ответов, чтобы сэкономить время.

$link = mysql_connect('localhost','root','yourPassword')
mysql_select_db('database',$link);
$sql = 'SELECT id FROM games'
$result = mysql_query($sql,$link);

$num_rows = mysql_num_rows($result);

// i is the row number and will be 0 through $num_rows-1
for ($i = 0; $i < $num_rows; $i++) {
    $value = mysql_result($result, i, 'id');
    echo 'Row ', i, ': ', $value, "\n";
}
2 голосов
/ 01 мая 2009

«Лучший способ», за исключением некоторых обычных способов извлечения отдельной записи из базы данных с помощью PHP, выглядит так:

с mysqli

$sql = "SELECT id, name, producer FROM games WHERE user_id = 1";
$result = $db->query($sql);
$row = $result->fetch_row();

с Zend Framework

// Внутри стола класс

$select = $this->select()->where('user_id = ?', 1);  
$row = $this->fetchRow($select);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...