Online PHP editor | output for UtMKs
Run your php code online; get statistics, vld output and compare output from all versions.
$sql = $conn -> prepare("select * from table where id = ?");
$sql -> bind_param('i', $array[0]);
$array = array(1);
$sql -> execute();
function sql(){
return function($array){
$sql = $conn -> prepare("select * from table where id = ?");
$sql -> bind_param('i', $array[0]);
return $sql -> execute();
}
}
sql()(array(1));
В этом случае jit не сможет освободить предыдущее место массива, так как на него есть указатель.пока не заработал jit
В этом случае тоже, imho, не то. Вероятно забиндить в шаблон нужно до реальной инициализации данных. Так что упихать возвращаемую функцию будет тупо некуда... Помог бы какой-нибудь bindParamCallback, но такого никто не удосужился придумать и добавить в PDO. Хотя, кто мешает добавить что-то новое в ядро ?сделай каринг
я не понимаю твою проблему, return function($array) это и есть твой CallbackТак что упихать возвращаемую функцию будет тупо некуда...
function getByIdCallback($conn){
return function($array) use ($conn){
$sql = $conn -> prepare("select * from table where id = ?");
$sql -> bind_param('i', $array[0]);
return $sql;
}
}
$sql = getByIdCallback($conn);
$result = $sql(array(1))->execute();
$sql = $conn -> prepare("UPDATE table SET name=? WHERE id = ?");
$sql -> bind_param('s', $array[0], $array[1]);
foreach ($data as $array) {
$sql -> execute();
}
Проблема не в самих callback, а в отсутствии возможности забиндить callback-конструкцию в чистом PDO. Имеется ввиду именно чистое PDO, так как в любой надстройке над ним можно расширять функциональность без особого головняка.return function($array) это и есть твой Callback
$sql = function($name, $id) use ($conn){
$sql = $conn -> prepare("UPDATE table SET name=? WHERE id = ?");
$sql -> bind_param('s', $name);
$sql -> bind_param('i', $id);
return $sql;
};
foreach($rows as $row){
$sql($row[0], $row[1])->execute();
}
память освобождает garbage collector, с JIT он никак не связан - создай строку на 10 мегабайт, перепиши значение переменной, и наблюдай, как память не освободиласьВ этом случае jit не сможет освободить предыдущее место массива, так как на него есть указатель.
ты не писал на php4? это ж был стандартный лайфхак, как без проверки наличия поля массива и объекта не нарваться на Notice - обратиться по ссылкепоинтер на undefined, оригинально
на%^... зачем в PHP эти JS-костыли, которые там пишут из-за отсутствия модификаторов доступа и наследования?sql()(array(1));
я не пользовался )ты не писал на php4? это ж был стандартный лайфхак
в асинхронном языке, которым php хочет быть, используются callback-функции, но если ты до сих в php4 то я тебя понимаюзачем в PHP эти JS-костыли
в mysqli нет привязки по значению@Фанат вот скажи, в чем суть вопроса - зачем вообще байндить по ссылке? Почему не хочешь привязывать по значению перед каждым запросом?