2013-09-10 3 views
2

У меня есть следующий код:bind_param() не похоже на работу

<?php 
$dbhost = 'localhost'; 
$dbuser = 'user'; 
$dbpass = 'password'; 
$db = new mysqli($dbhost, $dbuser, $dbpass, 'images_db'); 
if($db->connect_errno > 0){ 
die('Unable to connect to database [' . $db->connect_error . ']'); 
} 
else{ 
echo "Connected to database"; 
} 
//filename, mime_type and file_size are columns in the table images 
$stmt = $db->prepare("INSERT INTO images (filename, mime_type, file_size) VALUES (?, ?, ?)"); 
$string1 = 'string 1'; 
$string2 = 'string 2'; 
$stmt->bind_param('ssi', $string1, $string2, 123); 
$stmt->execute(); 
$stmt->close(); 
$mysqli->close(); 
?> 

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

$stmt->bind_param('ssi', $string1, $string2, 123); 

и вставить значения строки и целые непосредственно в $ db-> подготовить заявление (заменив знаки вопроса), то все работает хорошо, и строка добавляется в таблицу базы данных ,

Что я делаю неправильно в строке bind_param, которая препятствует добавлению новой строки в базу данных?

+2

do printf (ошибка «ошибка:% s. \ N», $ stmt->); после выполнения execute(), чтобы увидеть какие-либо ошибки ..! –

+0

Ошибок здесь нет после выполнения(). – woodwardmw

ответ

11

mysqli_stmt_bind_param принимает переменные (по ссылке). Вы не можете использовать литералы. Измените свой код на

$fileSize = 123; 
$stmt->bind_param('ssi', $string1, $string2, $fileSize); 
+0

Вот что я делал неправильно - спасибо! – woodwardmw

0

Попробуйте присвоить переменную после bind_param(). Он передается по ссылке. Так что это будет работать и после этого.

$stmt = $db->prepare("INSERT INTO images (filename, mime_type, file_size) VALUES (?, ?, ?)"); 
$stmt->bind_param('ssi', $string1, $string2, $num); 
$string1 = 'string 1'; 
$string2 = 'string 2'; 
$num=123; 
$stmt->execute(); 
+2

Это также работает - я не думаю, что после того, как вы сделали какое-либо изменение, но вы исправили проблему, которая заключалась в том, что у меня была буквальная, а не строка в качестве аргумента в bind_param. – woodwardmw

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