PHP bind_params с null

Опитвам се да свържа параметри към INSERT INTO MySQLi подготвен оператор, ако тази променлива съществува, в противен случай вмъкнете null.

Това е, което имам, но не работи:

if (!empty($name)) {
    $result->bind_param('ss', $name, $url_friendly_name);
} else {
    $result->bind_param('ss', null, null);
}

if (!empty($description)) {
    $result->bind_param('s', $description);
} else {
    $result->bind_param('s', null);
}

Някой знае ли за по-добър начин за това или има просто малък проблем с моя код. Правя горното за всяка променлива в подготвения отчет.


person ATLChris    schedule 07.03.2011    source източник
comment
Можете ли да използвате празен низ там, напр. '' ?   -  person alex    schedule 07.03.2011
comment
Опитвате ли се да оставите поле извън заявката, ако е празно?   -  person Explosion Pills    schedule 07.03.2011
comment
@tandu да, ако мога да оставя поле, това също ще бъде работа. Имате ли по-добър начин да го направите?   -  person ATLChris    schedule 07.03.2011
comment
Ще трябва да конструирате условно заявката .. Мисля, че това е, което бих направил. Не използвам mysqli (това е, което използвате вие, нали?), Така че не знам толкова много в този случай..   -  person Explosion Pills    schedule 07.03.2011
comment
Това няма да ми позволи да използвам подготвено изявление.   -  person ATLChris    schedule 07.03.2011


Отговори (2)


bind_param работи по препратка. Това означава, че приема променлива, след което използва стойността на тази променлива в execute.

null не е променлива.

Опитайте да зададете променлива на null и след това да обвържете тази променлива вместо това.

(Също така обмислете използването на PDO вместо mysqli, където методът execute може да вземе прост масив и можете да заобиколите шантавата методология на обвързване на mysqli.)

person Charles    schedule 07.03.2011

Имайте предвид, че не можете да използвате bind_param два пъти, защото последният оператор ще замени първия. Опитайте се да намерите начин да използвате bind_param само веднъж.

person Justo    schedule 30.12.2013