PHP bind_params с нулем

Я пытаюсь связать параметры с подготовленным оператором 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