2013-12-09 4 views
0

Мне нужна помощь с моей функцией, которую я собираю, я пытаюсь использовать MYSQLI, но я не так хорош.Функция динамической вставки в базу данных с использованием mysqli prepare

это моя функция:

function insertToDb($table,$rowsarray,$valuequestionmarks,$lenstrings,$valarray){ 

     $this->mysqli->set_charset("utf8"); 
     if ($insert_stmt = $this->mysqli->prepare(
     "INSERT INTO $table ($rowsarray) 
     VALUES 
     ($valuequestionmarks)" 
     )) 
     { 
     $insert_stmt->bind_param("$lenstrings",$valarray); 
     // Execute the prepared query. 
     if(!$insert_stmt->execute()) 
      { 
      die("Execute failed: (" . $insert_stmt->errno . ") " . $insert_stmt->error); 
      } 
     } 

    } 

И это, как я называю:

    $img = "something.jpg"; 
        $uip = ulUtils::GetRemoteIP(false); 
        $table='forgotpassqm'; 
        $rowsarray = 'email,text,img,ip'; 
        $valuequestionmarks ='?,?,?,?'; 
        $lenstrings ='ssss'; 
        $valarray ='$email,$text,$img,$uip'; 

        $func->insertToDb($table,$rowsarray,$valuequestionmarks,$lenstrings,$valarray); 

И я держу получить эту ошибку:

Warning: mysqli_stmt::bind_param(): Number of elements in type definition string doesn't match number of bind variables 

И выполнить ошибку:

Execute failed: (2031) No data supplied for parameters in prepared statement 

Я попробовал выделить комбинацию без работы, я прочитал другой вопрос, как мой, и никто не работал или не помогал.

И я знаю, что это касается ssss, но я использую 4, и кажется, что все в порядке, где я здесь не так? Спасибо.

EDIT:

$table output : forgotpassqm . 
$rowsaray output: email,text,img,ip . 
$valuequestionmarks output : ?,?,?,? . 
$lenstrings output: ssss. 
$valarray output: $email,$text,$img,$uip. 

Я думаю, что проблема в $ valarray.

ответ

1

Судя по его взглядам, вы пытаетесь отправить список переменных с разделителями-запятыми в виде массива (а не как работает массив), и вы используете одинарные кавычки, чтобы переменные не были интерполированы на их значения.

bind_param() ожидает список аргументов после определений типов. Вы не отправляете список, вы отправляете строку '$email,$text,$img,$uip'.
Ваш вызов этой функции должен выглядеть следующим образом:

$stmt->bind_param("ssss", $email, $text, $img, $uip); 
+0

Что не так с тем, как я сделал? вы посмотрели, как я вставил параметры через vars? – Ravg

+0

Да, я сделал, однако утверждение, которое вы имеете о '$ valarray = '$ email, $ text, $ img, $ uip';', является не чем иным, как строкой, поскольку вы используете одинарные кавычки. Я думаю, что я вижу, что вы пытаетесь сделать, но я бы предложил вам приблизиться к реализации немного по-другому. – Crackertastic

+0

Хорошо, я понял, я отлажен, и это проблема, у вас есть предложение? возможно, я использую его как array(), а затем в функции я буду использовать список? – Ravg

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