PHP - Простой способ считать единственную запись из MySQL

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

Здесь, когда активен слой преобразования в numpy, происходит следующее:

  • numpy массивы преобразуются в R массивы всякий раз, когда это необходимо для R
  • R массивы преобразуются в numpy массивы при возврате из R

Эта симметрия не является обязательным требованием, а является способом, которым по умолчанию является уровень преобразования numpy. Можно настроить слой асимметричного преобразования, который будет здесь преобразовывать числовые массивы в R-массивы, но оставляя R-массивы как таковые при возвращении из R, относительно быстро и легко.

import numpy
from rpy2.rinterface_lib import sexp
from rpy2 import robjects
from rpy2.robjects import conversion
from rpy2.robjects import numpy2ri

# We are going to build our custom converter by subtraction, that is
# starting from the numpy converter and only revert the part converting R
# objects into numpy arrays to the default conversion. We could have also
# build it by addition. 
myconverter = conversion.Converter('assym. numpy',
                                   template=numpy2ri.converter)
myconverter.rpy2py.register(sexp.Sexp,
                            robjects.default_converter.rpy2py)

Это пользовательское преобразование может быть использовано тогда, когда оно нам нужно:

with conversion.localconverter(myconverter):
    res = stats.quantile(numpy.array([1, 2, 3, 4]))

Результат:

>>> print(res.names)                                                                                                   
[1] "0%"   "25%"  "50%"  "75%"  "100%"

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

>>> stats.quantile(robjects.vectors.IntVector(numpy.array([1, 2, 3, 4]))).names                                           
R object with classes: ('character',) mapped to:
['0%', '25%', '50%', '75%', '100%']
56
задан Steeven 14 October 2012 в 19:29
поделиться

7 ответов

The easiest way is to use mysql_result. I copied some of the code below from other answers to save time.

$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
ответ дан 26 November 2019 в 17:10
поделиться

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

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

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

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

2
ответ дан 26 November 2019 в 17:10
поделиться

Внимание! Ваш 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. Однако найти эту запись намного меньше памяти и времени, чем получить каждую запись и вывести строку номер один.

8
ответ дан 26 November 2019 в 17:10
поделиться

Сначала вы подключаетесь к своей базе данных. Затем вы строите строку запроса. Затем вы запускаете запрос и сохраняете результат, и, наконец, извлекаете нужные строки из результата, используя один из методов выборки.

$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;

Редактировать: Извините, забыл соединение с базой данных. Добавил его сейчас

2
ответ дан 26 November 2019 в 17:10
поделиться

'Best way' Помимо некоторых обычных способов извлечения отдельной записи из базы данных с помощью 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);
2
ответ дан 26 November 2019 в 17:10
поделиться

Используя 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, что вместо этого выбрасывает исключения)

21
ответ дан 26 November 2019 в 17:10
поделиться
$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']

31
ответ дан 26 November 2019 в 17:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: