Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: вопрос по mysqli

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Без описания
PATCH
Отправлено: 13 Июля, 2012 - 05:42:01
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 924
Дата рег-ции: Апр. 2011  


Помог: 22 раз(а)




решил с mysql перейти на mysqli по многим причинам, но возник вопрос как передать несколько параметров в sqli запрос разных типов? погуглил ,почитал, но ненашел того что искал.
name - стрингового типа
id - числового
PHP:
скопировать код в буфер обмена
  1. $stmt = $sql->prepare("SELECT name,quest FROM book WHERE id=? or name=?") or die('Ошибка запроса');   //Отправляем шаблон
  2. $stmt->bind_param('i',$id);      //Устанавливаем параметры , установил в данном случии для id как для name задать cтринговый тип?
  3. $id = 4;
  4. $name='Павел';
  5.  
  6. $stmt->execute() or die('Предупреждение о неудачном запросе');      //Выполняем запрос
  7.  
  8. $stmt->bind_result($col1, $col2);   //Сохраняем результат в массив
  9. while ($stmt->fetch()) {
  10.         echo $col1.';'.$col2.'<br>';   //Выводим результат пользователю.
  11. }
  12.  
  13. $stmt->close(); //Удаляем шаблон из памяти.
  14.  


возник еще 1 вопрос как вернуть ассоциативный массив используя запрос в классе stmt
прочитал про класс result что он возвращает значение из стандартного класса mysqli и stmt
$result->fetch_assoc но при var_dump пишет ошибку
CODE (SQL):
скопировать код в буфер обмена
  1. Call TO a member FUNCTION fetch_assoc() ON a non-object


код :
PHP:
скопировать код в буфер обмена
  1.  
  2. $stmt = $sql->prepare("SELECT name,quest FROM book ");   //Отправляем шаблон
  3.  
  4. $stmt->execute() or die("Предупреждение о неудачном запросе");      //Выполняем запрос
  5.  
  6.  
  7. var_dump($result->fetch_assoc());//Call to a member function fetch_assoc() on a non-object
  8. $stmt->close();
  9.  

(Отредактировано автором: 13 Июля, 2012 - 10:18:51)

 
 Top
DeepVarvar Супермодератор
Отправлено: 13 Июля, 2012 - 09:22:46
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




PATCH пишет:
var_dump($result
И где вы его нашли?
 
 Top
tuareg
Отправлено: 13 Июля, 2012 - 10:09:06
Post Id


Участник


Покинул форум
Сообщений всего: 1234
Дата рег-ции: Июнь 2010  


Помог: 69 раз(а)




Зачем Вы используете prepare? Запросы выполняются раза в полтора-два дольше простых запросов. Prepare предназначены для запросов в цикле. Для простых выборок использовать их IMXO не рационально
 
 Top
PATCH
Отправлено: 13 Июля, 2012 - 10:26:30
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 924
Дата рег-ции: Апр. 2011  


Помог: 22 раз(а)




DeepVarvar пишет:
И где вы его нашли?

что имено? если вы про объект то сам не понимаю не много .
объект $sql я объявлял от класса mysqli в конструктор которого передавал там нужные свойства для соединения
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $user = "root";         //Имя пользователя
  3. $password = "";         //Пароль пользователя
  4. $host = "localhost";    //Хост
  5. $db = "project";         //БД
  6. $sql = new mysqli($host,$user,$password,$db) or die(mysqli_connect_error());
  7. ?>  

но вот как создался новый объект $stmt я подумал что он уже заранее создан)) т.к есть mysqli_stmt следовательно я подумал что есть и $result объект)) видно не допонимаю немного логики работы) в mysqli ))

PHP:
скопировать код в буфер обмена
  1. Зачем Вы используете prepare? Запросы выполняются раза в полтора-два дольше простых запросов. Prepare предназначены для запросов в цикле. Для простых выборок использовать их IMXO не рационально

почитал на досуге ,что prepare может и медленный, но считается самый защищеный метод передачи sql запроса , однако стоит заметить где вы увидели в моем sql запросе одну запись? там как бы целую таблицу выводит , имхо в цикле будет выводить, var_dump для отладки.
 
 Top
tuareg
Отправлено: 13 Июля, 2012 - 10:39:36
Post Id


Участник


Покинул форум
Сообщений всего: 1234
Дата рег-ции: Июнь 2010  


Помог: 69 раз(а)




DeepVarvar имеет ввиду
PHP:
скопировать код в буфер обмена
  1.  
  2. $stmt = $sql->prepare("SELECT name,quest FROM book ");   //Отправляем шаблон
  3.  
  4. $stmt->execute() or die("Предупреждение о неудачном запросе");      //Выполняем запрос
  5.  
  6. var_dump($result->fetch_assoc());//С чего $result когда Вы используете $stmt ?
  7.  
  8. $stmt->close();
  9.  
 
 Top
PATCH
Отправлено: 13 Июля, 2012 - 11:05:24
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 924
Дата рег-ции: Апр. 2011  


Помог: 22 раз(а)




в $stmt нету так называемого ассоциативного массива а $result 'mysqli_result — объединяет функции для получения результатов запросов, сделанных с помощью mysqli или mysqli_stmt.' воть инфа с http://habrahabr[dot]ru/post/141127/
 
 Top
DelphinPRO
Отправлено: 13 Июля, 2012 - 12:05:39
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




PATCH пишет:
но возник вопрос как передать несколько параметров в sqli запрос разных типов?

PHP:
скопировать код в буфер обмена
  1. // Для каждого параметра указывается его тип
  2. $stmt->bind_param('is',$id, $name); // i - INT типы, d - DOUBLE типы, s - остальные типы
  3. $id = 4;
  4. $name='Павел';

(Отредактировано автором: 13 Июля, 2012 - 12:06:04)



-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
PATCH
Отправлено: 13 Июля, 2012 - 12:07:44
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 924
Дата рег-ции: Апр. 2011  


Помог: 22 раз(а)




т.е если будет 5 разных переменых то будет типо iissb ? типо первых два integer потом 2 стринговых и 1 boolean? чисто для уточнения

(Отредактировано автором: 13 Июля, 2012 - 12:08:44)

 
 Top
DelphinPRO
Отправлено: 13 Июля, 2012 - 12:23:32
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




да
==
только "b" - это тип "blob"
из всего четыре
i - INT
b - BLOB
d - DOUBE
s - остальное

булевы типы, вероятно, следует помечать буквой "i".

(Отредактировано автором: 13 Июля, 2012 - 12:25:21)



-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
PATCH
Отправлено: 13 Июля, 2012 - 18:58:30
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 924
Дата рег-ции: Апр. 2011  


Помог: 22 раз(а)




спасибо за разъяснение, но осталась проблема как получить ассоциативный массив из sql запроса $stmt ?
 
 Top
armancho7777777 Супермодератор
Отправлено: 13 Июля, 2012 - 19:08:24
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




PATCH пишет:
решил с mysql перейти на mysqli

Почему?

PATCH пишет:
по многим причинам

По каким, если не секрет?

P.S. Спрашиваю для общего развития, так сказать)

(Отредактировано автором: 13 Июля, 2012 - 19:09:51)

 
 Top
PATCH
Отправлено: 13 Июля, 2012 - 19:14:22
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 924
Дата рег-ции: Апр. 2011  


Помог: 22 раз(а)




armancho7777777 пишет:
По каким, если не секрет?
считается что он быстрее стандартного Mysql да и к тому же можно объявить как объект + при использовании mysqli_prepare (хоть функция и считается немного медленной, но считается более защищенной от sql инъекций) + в 6 версии php говорят уберут стандартную библиотеку mysql будет pdo и mysqli
 
 Top
DelphinPRO
Отправлено: 13 Июля, 2012 - 20:50:31
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




armancho7777777, очевидно же. mysql_* официально объявлен устаревшим и рано или поздно будет полностью выпилен из php. Одного этого достаточно, чтобы им не пользоваться. К тожу mysqli имеет помимо ОО и функциональный апи, так что переход может стать максимально безболезненным. ;)


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
zezst
Отправлено: 15 Июля, 2012 - 01:52:58
Post Id



Новичок


Покинул форум
Сообщений всего: 10
Дата рег-ции: Июль 2012  
Откуда: ближнее замкадье


Помог: 1 раз(а)




Сам недавно мучался.
Может поможет?
PHP:
скопировать код в буфер обмена
  1. $mysqli = new mysqli($dblocation, $dbuser, $dbpassword);
  2. $query = $mysqli->query('SHOW DATABASES');
  3. $array = $query->fetch_all(MYSQLI_BOTH));//тут получил массив

Работает в php >= 5.3

(Отредактировано автором: 15 Июля, 2012 - 01:54:08)

 
 Top
armancho7777777 Супермодератор
Отправлено: 15 Июля, 2012 - 02:14:17
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




PATCH, DelphinPRO, - благодарю.

DelphinPRO пишет:
очевидно же. mysql_* официально объявлен

Как не стыдно признать, но увы, не знал.

(Отредактировано автором: 15 Июля, 2012 - 02:17:40)

 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Работа с СУБД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB