Как лучше всего PHP читать одну запись из базы данных MySQL? Например:
SELECT id FROM games
Я пытался найти ответ в старых вопросах, но не повезло.
$id = mysql_result(mysql_query("SELECT id FROM games LIMIT 1"),0);
$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
или что-то подобное, чтобы получить только одну строку и не более. Также вы можете получить доступ к вашему id, как $row['id']
Используя 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 вместо исключения исключений)
Предполагая, что вы используете первичный ключ с автоматическим добавлением, что является обычным способом выполнения действий, тогда вы можете получить доступ к ключевому значению последней строки, введенной в базу данных, с помощью:
$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'];
Предупреждение! Ваш 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. Тем не менее, это намного меньше памяти и времени, чтобы найти одну запись, чем получить каждую запись и выходную строку номер один.
Еще один ответ для объектно-ориентированного стиля. Нашел это решение для меня:
$id = $dbh->query("SELECT id FROM mytable WHERE mycolumn = 'foo'")->fetch_object()->id;
возвращает только один идентификатор. Убедитесь, что ваш дизайн гарантирует, что вы получили правильный.
Используйте LIMIT 1. его легко.
$rows = $db->query("select id from games LIMIT 1"); $row = $rows->fetch_object(); echo $row->id;
Сначала вы подключаетесь к своей базе данных. Затем вы создаете строку запроса. Затем вы запускаете запрос и сохраняете результат, и, наконец, вы выбираете, какие строки вы хотите получить, используя один из методов выборки.
$link = mysql_connect('localhost','root','yourPassword') mysql_select_db('database',$link); $sql = 'SELECT id FROM games' $result = mysql_query($sql,$link); $singleRow = mysql_fetch_array($result) echo $singleRow;
Изменить: извините, забыли соединение с базой данных. Добавлено сейчас
«Лучший способ» в сторону некоторых обычных способов получения одной записи из базы данных с помощью PHP:
$sql = "SELECT id, name, producer FROM games WHERE user_id = 1"; $result = $db->query($sql); $row = $result->fetch_row();
// Внутри класса таблицы
$select = $this->select()->where('user_id = ?', 1); $row = $this->fetchRow($select);
Самый простой способ – использовать 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"; }
Мне очень нравится философия библиотеки баз данных ezSQL , которая обертывает собственные методы SQL в простом в использовании интерфейсе.
Получение одного значения из базы данных тривиально:
$id = $db->get_var("SELECT id FROM games WHERE ...");
Это также облегчает выбор одной строки, столбца или набора строк.
Я согласен с тем, что mysql_result – это простой способ получить содержимое одной ячейки из набора результатов MySQL. Крошечный код:
$r = mysql_query('SELECT id FROM table') or die(mysql_error()); if (mysql_num_rows($r) > 0) { echo mysql_result($r); // will output first ID echo mysql_result($r, 1); // will ouput second ID }
Это просто
//Read table records $show = mysqli_query($link,"SELECT * FROM table_name"); while($row = @mysqli_fetch_object($show)) { //Read a row/record echo $row->FIELD1."<br>"; echo $row->FIELD2."<br>"; echo $row->FIELD3."<br><hr>"; }
Простой способ получения одиночной записи из базы данных MySQL с помощью списка PHP
SQL Query – это SELECT user_name from user_table WHERE user_id = 6
Код PHP для вышеуказанного запроса
$sql_select = ""; $sql_select .= "SELECT "; $sql_select .= " user_name "; $sql_select .= "FROM user_table "; $sql_select .= "WHERE user_id = 6" ; $rs_id = mysql_query($sql_select, $link) or die(mysql_error()); list($userName) = mysql_fetch_row($rs_id);
Примечание . Концепция списка должна применяться для однократной выборки не для нескольких строк
Лучше, если SQL будет оптимизирован с добавлением LIMIT 1
в конце:
$query = "select id from games LIMIT 1";
SO ANSWER IS (работает на php 5.6.3) :
Если вы хотите получить первый элемент первой строки (даже если это не столбец идентификатора):
queryExec($query) -> fetch_array()[0];
Если вы хотите получить первую строку (отдельный элемент из БД)
queryExec($query) -> fetch_assoc();
Если вы хотите, чтобы какой-то точный столбец из первой строки
queryExec($query) -> fetch_assoc()['columnName'];
или нужно исправить запрос и использовать первый письменный способ 🙂
Скажем, что вы хотите подсчитать строки в существующей таблице:
Используйте mysql_result только с одним параметром, равным «0»,
Как это:
$ string = mysql_result (
mysql_query ("SELECT COUNT (*) FROMdatabase_name
.table_name
")
, 0);
ps.put (`) вокруг имени_базы базы данных и имя_таблицы
var_dump ($ строка);
// string (1) "5" // если в таблице всего 5 записей
Примечание: если вы запрашиваете что-то еще, например
SELECT * FROM database.table LIMIT 1
и таблица имеет более одного столбца, тогда вы НЕ получите array()
в своем var_dump, вы получите только первый столбец
function getSingleRow($table, $where_clause="", $column=" * ",$debug=0) { $SelectQuery = createQuery($table, $where_clause, $column); $result = executeQuery($SelectQuery,$debug); while($row = mysql_fetch_array($result)) { $row_val = $row; } return $row_val; }
$results = $mysqli->query("SELECT product_code, product_name, product_desc, product_img_name, price FROM products WHERE id = 1");
Я мог бы получить результат, используя следующее:
$resu = mysqli_fetch_assoc(mysqli_query($conn, "SELECT * FROM employees1 WHERE pkint =58")); echo ( "<br />". $resu['pkint']). "<br />" . $resu['f1'] . "<br />" . $resu['f2']. "<br />" . $resu['f3']. "<br />" . $resu['f4' ];
employee 1 – имя таблицы. pkint – это первичный ключ. f1, f2, f3, f4 – имена полей. $ resu – это ярлык переменной для результата. Ниже приведен вывод:
<br />58 <br />Caroline <br />Smith <br />Zandu Balm
$username=$_POST['username']; $password=$_POST['password']; $SQL = "SELECT * FROM user where user_name ='".$username."' AND password = '".$password."'"; $result = mysql_query($SQL); if($result === FALSE) { die(mysql_error()); // TODO: better error handling } $result = mysql_fetch_assoc($result); $user_id = $result['user_id']; echo $user_id;