Php mysql select получить одно значение

Как получить одно значение из запроса MySQL в PHP

Я знаю, что этот пост похож на многие другие вопросы. Однако они совершенно не помогли разобраться в этом вопросе. Я хочу, чтобы запрос возвращал одно значение и сохранял его в переменной. SQL-запрос работает отлично в базе данных, но не с PHP. Где я здесь ошибся?

$datelink = $_GET['bdate']; $nid = $mysqli->query("select 'newsletterId' from 'newsletter' where ndate='$datelink'")->fetch_object()->name; 

@Mario, я сделал это, но не сработало .. $ nid = $ mysqli-> query («выберите newsletterId из newsletter где ndate = ’30 -01-2015 ‘») -> fetch_object () -> newsletterId;

Ваш код открыт для атак с использованием SQL-инъекций. Пожалуйста, прочитайте это: stackoverflow.com/questions/60174/…

@Nephil: если ndate — это столбец DATE (так и должно быть, поскольку вы используете его для хранения дат), вам нужно использовать формат даты yyyy-mm-dd , например 2015-01-30 . Вы не получите результаты при использовании других форматов.

Типы строк @Nephil не подходят для дат. В какой-то момент вы захотите выбрать из диапазона дат, что совершенно невозможно при использовании строкового типа. Также обратите внимание, что при сортировке строк 10-02-2015 предшествует 30-01-2015 . И 01-12-2016 наступает до 10-02-2015 .

3 ответа

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

$sql3="select newsletterId from newsletter where ndate='$bdate' limit 1"; $result3 = $conn->query($sql3); if ($result3->num_rows > 0) < while($row3 = $result3->fetch_assoc()) < $nid=$row3['newsletterId']; //Here is where the single value is stored. >> else
$datelink=$_GET['bdate']; $nid= $mysqli->query("SELECT 'newsletterId' FROM 'newsletter' WHERE ndate='$datelink' LIMIT 1")->fetch_object()->name; 

Прежде чем запрашивать базу данных, вы должны инициировать свое соединение.

$mysqli = new mysqli("example.com", "user", "password", "database"); if ($mysqli->connect_errno) < echo "Failed to connect to MySQL: " . $mysqli->connect_error; > 

Также опасно просто добавить строку из $ _GET. На ваш сайт можно атаковать с помощью SQL-инъекции. Вы определенно должны использовать PDO с подготовленными операторами. Или какую-то другую библиотеку, например, мне нравится dibi.

Читайте также:  Vs code wsl python

Обновление: вы получаете доступ к name столбца, которого не существует. Он должен бросить уведомление ( PHP Notice: Undefined property: stdClass::$name ). Если вы не видите уведомления, и вы разрабатываете локально (и вам обязательно нужно), вы можете включить его в свой файл php.ini с error_reporting = E_ALL .

Вероятно, вам нужна колонка newsletterId . Так что вообще:

$mysqli = new mysqli('example.com', 'user', 'password', 'database'); if ($mysqli->connect_errno) < echo 'Failed to connect to MySQL: ' . $mysqli->connect_error; > $dateRaw = $_GET['bdate']; // for example '22.12.2012', if this value is already in format YYYY-MM-DD, you can step next line and use it $date = date('Y-m-d', strtotime($dateRaw)); $statement = $mysqli->prepare("SELECT 'newsletterId' FROM 'newsletter' WHERE 'ndate'=? LIMIT 1"); $statement->bind_param('s', $date); // replace the question mark with properly escaped date $statement->execute(); $result = $statement->get_result(); if ($result->num_rows) < $newsletterObject = $result->fetch_object(); $newsletterId = $newsletterObject->newsletterId; // you had $newsletterObject->name here > else < echo "Newsletter with the date doesn't exist"; >$statement->close(); 

Источник

Кодовая польза

Полезные советы. Упрощаем виртуальную жизнь доступными средствами.

четверг, 15 июля 2010 г.

Единственное значение из mysql на php в 2 строки

Бывает нужно получить единственное значение из MySQL и огород из запроса и получения строки из результата, а потом использования значения полученного массива кажется явно лишним.

Т.е. стандартное (академическое) решение выглядит так:

 $sql = mysqli_query("SELECT COUNT(*) FROM `table` WHERE `col`='value';"); // получаем данные $row = mysqli_fetch_assoc($sql); // получаем строку в массив echo $row['COUNT(*)']; // используем значение массива // неудобная переменная, нужно одно значение, а используем массив // можно присвоить значение новой переменной $count = $row['COUNT(*)']; // либо переопределить массив в переменную $row = $row['COUNT(*)']; // но это либо дополнительная переменная, // либо не логичное название переменной, // либо с самого начала нужно было использовать правильное название. 


В принципе предлагаемый вариант немного удобнее для последующего использования:

 $sql = mysqli_query("SELECT COUNT(*) FROM `table` WHERE `col`='value';"); // получаем данные list($count) = mysqli_fetch_array($sql); // получаем строку в массив и // первое значение сразу присваиваем переменной echo $count; // используем переменную

Источник

Single result from database using mysqli

I am trying to use mySQLi for the first time. I have done it in the case of loop. Loop results are showing but I am stuck when I try to show a single record. Here is loop code that is working.

How do I show a single record, any record, name, or email, from the first row or whatever, just a single record, how would I do that? In a single record case, consider all the above loop part removed and let’s show any single record without a loop.

Actually i want to remove the loop part and and without limit i want to get one record with query to show single record.

6 Answers 6

When just a single result is needed, then no loop should be used. Just fetch the row right away.

    In case you need to fetch the entire row into associative array:

 $row = $result->fetch_row(); $value = $row[0] ?? false; 

The last example will return the first column from the first returned row, or false if no row was returned. It can be also shortened to a single line,

$value = $result->fetch_row()[0] ?? false; 

Below are complete examples for different use cases

Variables to be used in the query

When variables are to be used in the query, then a prepared statement must be used. For example, given we have a variable $id :

$query = "SELECT ssfullname, ssemail FROM userss WHERE = $conn->prepare($query); $stmt->bind_param("s", $id); $stmt->execute(); $result = $stmt->get_result(); $row = $result->fetch_assoc(); // in case you need just a single value $query = "SELECT count(*) FROM userss WHERE = $conn->prepare($query); $stmt->bind_param("s", $id); $stmt->execute(); $result = $stmt->get_result(); $value = $result->fetch_row()[0] ?? false; 

The detailed explanation of the above process can be found in my article. As to why you must follow it is explained in this famous question

No variables in the query

In your case, where no variables to be used in the query, you can use the query() method:

$query = "SELECT ssfullname, ssemail FROM userss ORDER BY ssid"; $result = $conn->query($query); // in case you need an array $row = $result->fetch_assoc(); // OR in case you need just a single value $value = $result->fetch_row()[0] ?? false; 

By the way, although using raw API while learning is okay, consider using some database abstraction library or at least a helper function in the future:

// using a helper function $sql = "SELECT email FROM users WHERE = prepared_select($conn, $sql, [$id])->fetch_row[0] ?? false; // using a database helper class $email = $db->getCol("SELECT email FROM users WHERE [$id]); 

As you can see, although a helper function can reduce the amount of code, a class’ method could encapsulate all the repetitive code inside, making you to write only meaningful parts — the query, the input parameters and the desired result format (in the form of the method’s name).

Yes that’s object oriented programming. It scares me bcoz it seems difficult. But I want to learn it badly. Please recommend a place/source where I can learn about classes and use of class and objects etc.

You need to know OOP only to write classes. While using them do not require no special knowledge, it is as easy as calling a regular function. The only difference is a little prefix $class-> before function name. The rest is the same.

Use mysqli_fetch_row() . Try this,

$query = "SELECT ssfullname, ssemail FROM userss WHERE user_id mt24">
)" data-controller="se-share-sheet" data-se-share-sheet-title="Share a link to this answer" data-se-share-sheet-subtitle="" data-se-share-sheet-post-type="answer" data-se-share-sheet-social="facebook twitter devto" data-se-share-sheet-location="2" data-se-share-sheet-license-url="https%3a%2f%2fcreativecommons.org%2flicenses%2fby-sa%2f3.0%2f" data-se-share-sheet-license-name="CC BY-SA 3.0" data-s-popover-placement="bottom-start">Share
)" title="">Improve this answer
)">edited Feb 15, 2015 at 17:26
Funk Forty Niner
74.4k15 gold badges68 silver badges141 bronze badges
answered Jan 31, 2013 at 11:32
1
    5
    You can't do that with mysqli_fetch_row as it returns an enumerated array. Ex: $row[0], $row[1] You need to use mysqli_fetch_assoc, which returns an associative array, if you want to specify field names. Ex: $row['ssfullname'];
    – ironarm
    May 23, 2019 at 20:35
Add a comment|
7

If you assume just one result you could do this as in Edwin suggested by using specific users id.

$someUserId = 'abc123'; $stmt = $mysqli->prepare("SELECT ssfullname, ssemail FROM userss WHERE user_id = ?"); $stmt->bind_param('s', $someUserId); $stmt->execute(); $stmt->bind_result($ssfullname, $ssemail); $stmt->store_result(); $stmt->fetch(); ChromePhp::log($ssfullname, $ssemail); //log result in chrome if ChromePhp is used.

OR as "Your Common Sense" which selects just one user.

$stmt = $mysqli->prepare("SELECT ssfullname, ssemail FROM userss ORDER BY ssid LIMIT 1"); $stmt->execute(); $stmt->bind_result($ssfullname, $ssemail); $stmt->store_result(); $stmt->fetch(); 

Nothing really different from the above except for PHP v.5

Источник

Return One Row from MySQL

Amateur question, but something I've been wondering about. What is the PHP for selecting one row from a MySQL query? AKA you're picking something by unique ID (you know there's only one row that matches your request) and want to get only that value. Do you still have to use a while loop and mysql_fetch_row?

$query = "SELECT name,age FROM people WHERE uid = '2'"; $result = mysql_query($query); // what php is used to return the name and age? preferably without a loop? 

As stated in the PHP manual for the mysql_query() function: Use of this extension is discouraged. Instead, the MySQLi or PDO_MySQL extension should be used. See also MySQL: choosing an API guide and related FAQ for more information.

7 Answers 7

Add limit 0,1 and for PHP 7 use mysqli

$query = "SELECT name,age FROM people WHERE uid = '2' LIMIT 0,1"; $result = mysqli_query($query); $res = mysqli_fetch_assoc($result); echo $res["age"]; 

Editor's Note: I approved the edit to change mysql to mysqli because the mysql function has been deprecated from PHP7, the current lowest supported version. For time travelers who still use PHP5, the mysql is the correct function.

If uid is your primary key, or it has a unique constraint, you can simply call mysql_fetch_row($res) once.

If you want to verify that you actually got a result, you can check if mysql_num_rows($res) == 1 .

There is not any loop required, just call the function to extract one row from a Query Resultset:

$query = "SELECT name,age FROM people WHERE uid = '2'"; $result = mysql_query($query); $row = mysql_fetch_assoc( $result ); var_dump( $row ); 

I did not added any limit because using a Primary Key as filter(as it is in this specific case), using the Limit is just redundant.

Add LIMIT in your query. For instance,

SELECT name,age FROM people WHERE uid = '2' LIMIT 1 

fetch_object => Returns the current row of a result set as an object

$sql = "SELECT * from contacts where = $conn->query($sql); $allData =$result -> fetch_object(); var_dump($allData); 

fetch_assoc => Fetch a result row as an associative array

$sql = "SELECT * from contacts where = $conn->query($sql); $allData =$result -> fetch_assoc(); var_dump($allData); 

You can use fetch_assoc or fetch_object according to your need.

mysql_fetch_assoc this extension was deprecated in PHP 5.5.0, and it was removed in PHP 7.0.0. Instead use mysqli_fetch_assoc - this will fetch a result row as an associative array.

Example 1: Object oriented style

$query = "SELECT Name, CountryCode FROM City ORDER by ID DESC LIMIT 1"; $result = $mysqli->query($query); $row = $result->fetch_assoc(); echo $row['Name']; 

Example 2: Procedural style

$link = mysqli_connect("localhost", "my_user", "my_password", "dbname"); /* check connection */ if (mysqli_connect_errno()) < printf("Connect failed: %s\n", mysqli_connect_error()); exit(); >$query = "SELECT Name, CountryCode FROM City ORDER by ID DESC LIMIT 1"; if ($result = mysqli_query($link, $query)) < /* fetch associative array */ $row = mysqli_fetch_assoc($result); echo $row['Name']; >

Источник

Оцените статью