Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
Страницы: (3) 1 [2] 3  ( Перейти к первому непрочитанному сообщению )  
Фильтр авторов:    показать 
  скрыть
  Закрытая темаСоздание новой темыСоздание опроса

> Биндер для mysqli
Invis1ble  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме




******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 11890
Пользователь №: 23195
На форуме: 6 лет, 9 месяцев, 1 день
Карма: 434

Трезвый :
7 лет, 8 месяцев


да, не то
делаешь абстракцию над драйвером, и в ней заводишь $parameters user posted image


--------------------
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
twin  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 16032
Пользователь №: 6543
На форуме: 8 лет, 6 месяцев, 21 день
Карма: 301

Трезвый :
6 лет, 4 месяца


Ничего не понял... Как мне завести параметры, которых еще нету...

Вот я примерно так сделал. Это не абстракция? :)

<?php

namespace abc;

class mysqli extends \mysqli
{
public function __construct()
{
parent::__construct('localhost', 'root', '', 'test');
}

public function prepare($query)
{
return new mysqli_stmt($this, $query);
}
}



class mysqli_stmt extends \mysqli_stmt
{
public function __construct(mysqli $mysqli, $query)
{
parent::__construct($mysqli, $query);
}

public function bind_param($types, &...$vars)
{
var_dump($vars);
}
}

Если параметры определены до биндинга, все нормуль. Если после, то кирдык.
$mysqli = new mysqli;

$stmt = $mysqli->prepare("INSERT INTO `test` VALUES (?, ?)");

$stmt->bind_param('is', $id, $text);
$id = 5;
$text = 'text';


Не то я делаю?


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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Invis1ble  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме




******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 11890
Пользователь №: 23195
На форуме: 6 лет, 9 месяцев, 1 день
Карма: 434

Трезвый :
7 лет, 8 месяцев


class Foo
{
protected $params;

public function setParams(&...$params)
{
$this->params = $params;
}

public function dumpParams()
{
var_dump($this->params);
}
}


$foo = new Foo();

$foo->setParams($params);
$params = 'bar';
$foo->dumpParams();
// array (size=1)
// 0 => &string 'bar' (length=3)


--------------------
PMПисьмо на e-mail пользователюСайт пользователя
    1   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
twin  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 16032
Пользователь №: 6543
На форуме: 8 лет, 6 месяцев, 21 день
Карма: 301

Трезвый :
6 лет, 4 месяца


АААА! Вот спасибо, дай я тебя расцелую biggrin.gif biggrin.gif biggrin.gif

Все просто как три копейки, а тямы не хватило.


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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
twin  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 16032
Пользователь №: 6543
На форуме: 8 лет, 6 месяцев, 21 день
Карма: 301

Трезвый :
6 лет, 4 месяца


Нифига не то... Или я опять не догоняю. Мне нельзя трогать контекст. Он таким и должен быть:
$mysqli = new mysqli;

$stmt = $mysqli->prepare("INSERT INTO `test` VALUES (?, ?)");

$stmt->bind_param('is', $id, $text);
$id = 5;
$text = 'text';

По сути я сделал тоже самое, что и у тебя. Только переопределил метод. Но не работает же...


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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Invis1ble  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме




******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 11890
Пользователь №: 23195
На форуме: 6 лет, 9 месяцев, 1 день
Карма: 434

Трезвый :
7 лет, 8 месяцев


про контекст не понял
покажи код метода
и как проверяешь тоже покажи


--------------------
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
twin  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 16032
Пользователь №: 6543
На форуме: 8 лет, 6 месяцев, 21 день
Карма: 301

Трезвый :
6 лет, 4 месяца


Я же написал сверху. Именно так и проверяю. Если выше вызова, то видит. Ниже - нет. Наверно при переопределении область видимости меняется чтоли... Хрен пойми.


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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
twin  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 16032
Пользователь №: 6543
На форуме: 8 лет, 6 месяцев, 21 день
Карма: 301

Трезвый :
6 лет, 4 месяца


Цитата (Invis1ble @ 26.10.2015 - 18:53)
про контекст не понял

Мне нельзя ничего менять при вызовах. Должен сохраняться нативный синтаксис. Нельзя объявлять другие и дополнительные классы. И порядок вызовов должен сохраняться. Другими словами мне нужно отдебажить уже готовые скрипты, не меняя их.


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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
twin  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 16032
Пользователь №: 6543
На форуме: 8 лет, 6 месяцев, 21 день
Карма: 301

Трезвый :
6 лет, 4 месяца


Могу даже дамп дать))
CREATE TABLE IF NOT EXISTS `test` (
`id` int(5) NOT NULL AUTO_INCREMENT,
`text` text NOT NULL,
PRIMARY KEY (`id`)
)
ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;


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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Invis1ble  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме




******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 11890
Пользователь №: 23195
На форуме: 6 лет, 9 месяцев, 1 день
Карма: 434

Трезвый :
7 лет, 8 месяцев


да мне не нужен дамп, покажи код класса (mysqli_stmt или как он у тебя там называется)


--------------------
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Invis1ble  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме




******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 11890
Пользователь №: 23195
На форуме: 6 лет, 9 месяцев, 1 день
Карма: 434

Трезвый :
7 лет, 8 месяцев


Цитата (twin @ 26.10.2015 - 22:59)
Цитата (Invis1ble @ 26.10.2015 - 18:53)
про контекст не понял

Мне нельзя ничего менять при вызовах. Должен сохраняться нативный синтаксис. Нельзя объявлять другие и дополнительные классы. И порядок вызовов должен сохраняться. Другими словами мне нужно отдебажить уже готовые скрипты, не меняя их.

а как ты собрался дебажить тогда?
либо ты делаешь полную копию нативных классов (что бессмысленно), либо ты добавляешь дополнительную логику
всё от того, что ты не соблюдаешь инкапсуляцию, пользователь не должен лезть в исходники предоставляемых классов и вкорячивать туда своими грязными ручонками var_dump, для дебага должен быть программный интерфейс
не нравится такой подход - придется и дальше плакать, жрать кактус и обзывать приверженцев ООП нехорошими словами wink.gif


--------------------
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Invis1ble  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме




******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 11890
Пользователь №: 23195
На форуме: 6 лет, 9 месяцев, 1 день
Карма: 434

Трезвый :
7 лет, 8 месяцев


как вариант, в качестве хака - добавить дебаг в деструктор твоего mysqli_stmt (то есть перенести код из моего Foo::dumpParameters() в твой mysqli_stmt::__destruct()), но не уверен, сработает ли


--------------------
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
twin  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 16032
Пользователь №: 6543
На форуме: 8 лет, 6 месяцев, 21 день
Карма: 301

Трезвый :
6 лет, 4 месяца


Цитата (Invis1ble @ 26.10.2015 - 19:37)
не нравится такой подход - придется и дальше плакать, жрать кактус и обзывать приверженцев ООП нехорошими словами

Причем тут это... В данном случае и в мыслях не держал. И инкапсуляция тут не причем. Класс доступен для расширения, а значит имею полное право переопределить метод. А то, что он при этом теряет часть свойств, не моих грязных рученок вина. Просто разработчики нарушили правила Лискоу. Не нужно было делать такую возможность с постопределением параметров. Не подумали, что найдется такой вот индивид, кто наступит на эту граблю. smile.gif

Кстати, не я первый и не я последний делаю эту попытку. И все в принципе получается, кроме этих ссылок. Ну не получилось - жаль. Только и всего. С деструктором спасибо, но не выйдет. Для этого нужно объект разрушить, а мне нельзя лезть в контекст.


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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
twin  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 16032
Пользователь №: 6543
На форуме: 8 лет, 6 месяцев, 21 день
Карма: 301

Трезвый :
6 лет, 4 месяца


Семен Семеныч! biggrin.gif

Вот это я протупил вчера не выспавшись. Ведь execute() тоже можно переопределить. И все, проблема решена.

Invis1ble Всё таки надо тебя расцеловать. Надо. smile.gif


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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Invis1ble  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме




******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 11890
Пользователь №: 23195
На форуме: 6 лет, 9 месяцев, 1 день
Карма: 434

Трезвый :
7 лет, 8 месяцев


Цитата (twin @ 27.10.2015 - 03:26)
Для этого нужно объект разрушить, а мне нельзя лезть в контекст.

не нужно, он автоматически вызывается:
Цитата
Деструктор будет вызван при освобождении всех ссылок на определенный объект или при завершении скрипта (порядок выполнения деструкторов не гарантируется).

class Foo
{
protected $params;

public function setParams(&...$params)
{
$this->params = $params;
}

public function __destruct()
{
var_dump($this->params);
}
}


$foo = new Foo();

$foo->setParams($params);
$params = 'bar';
// array (size=1)
// 0 => &string 'bar' (length=3)


--------------------
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темыСтраницы: (3) 1 [2] 3  Закрытая темаСоздание новой темыСоздание опроса