2013-07-08 3 views
1

Я пытаюсь сделать подготовленный mysqli оператор, и по какой-то причине, по крайней мере, строки превращаются в 0 (нули).MySQLi готовые заявления, вставляющие нуль

Пример:
Таблица

id - int, PK 
name - varchar(45) 

код

if ($stmt = $mysqli->prepare("INSERT INTO test (name) VALUES(?)")){ 
    $stmt->bind_param('s',$name); 
    $name="Test1"; 
    $stmt->execute(); 
} else { 
    echo "prepare failed"; 
} 

При запуске этого, вновь вставляется строка в таблице будет иметь значение 0 для имени. Что я делаю не так? Я не могу использовать PDO, потому что сервер, на котором это происходит, не имеет его доступного.

+3

Вы должны объявить '$ name' * до *, используя его, например. – ceejayoz

+0

Положите '$ name =" Test1 ";' before 'bind_param()' – furas

+0

@coreno Я думаю, ваша проблема в другом месте. возможно, в том, как вы позже извлекаете строки. Рассмотрите возможность создания короткого/минимального полностью автономного сценария (создайте таблицу + вставить, затем выберите), который можно запустить и продемонстрировать проблему. Вероятно, вы обнаружите проблему в процессе создания этого сценария. – goat

ответ

-1

Есть несколько неправильных вещей на вашем коде:

  • bind_param не существует на PDOStatement, но bindParam да.
  • При привязке параметра с использованием имен вы должны поставить «:» перед параметром в свой запрос.
  • если вы используете? используйте номера индексов.
  • это необязательно, но вы должны передать тип param, используя PDO consts, такие как PDO :: PARAM_STR для строк.
  • Наконец, вы определяете свой $ name var после его использования, это не сработает: вы должны определить var перед использованием.

Код

if ($stmt = $mysqli->prepare("INSERT INTO test (name) VALUES(:name)")){ 
    # defining $name 
    $name = "Test1"; 

    # putting $name to the param :name 
    $stmt->bindParam(":name", $name, PDO::PARAM_STR); 

    # executing the prepared query. 
    $stmt->execute(); 
} else { 
    echo "prepare failed"; 
} 
+1

Я предполагаю, что $ mysqli означает расширение mysqli, а не pdo. – goat

+0

Да, я этого не заметил, но зачем использовать mysqli, когда мы можем использовать PDO, который поддерживает 12 разных SQL-драйверов? – barbu

+0

mysqli имеет некоторые функции pdo doesnt. плюс, у вас не всегда есть выбор (существующий код). – goat

Смежные вопросы