Нет данных, предоставленных для параметров в подготовленных состояниях

#php #mysqli #binding #http-post

#php #mysqli #привязка #http-post

Вопрос:

Автоматически сгенерированная привязка данных «Нет данных, предоставленных для параметров»

Я создал скрипт для поиска всех $_POST значений, отправленных формой, создания запроса и привязки данных для отправки через MySQLi

Это работает хорошо до конца и приводит к сообщению об ошибке:

«Нет данных, предоставленных для параметров в подготовленном операторе»

Это ставит меня в тупик, поскольку мои операторы echo, похоже, показывают, что данные передаются и обрабатываются.

 <?php
$user = "user";
$pw = "pw";
$url = "myURL"; 
$db = "myDB";
/*** create a new mysqli object with default database***/
$mysqli = @new mysqli($url, $user, $pw, $db);

/* check connection */ 
if(!mysqli_connect_errno())
    {
    /*** if we are successful ***/
    echo 'Connected Successfully<br />';

    /*** Create the SQL statement ***/
   /***Put each variable on separate line so I can use spreadsheet
    this helps make sure the number of values is equivalent in all parts ****/
    $type = "'";
    $params = "";
    $valholder = "";
    /*** Automatically read the variables sent from study software and generate the MySQLi binding */
    foreach ($_POST as $param_name => $param_val) {
    if(isset($_POST[$param_name])){
    if($param_val==='Submit'){
    }
    else{
    if(is_numeric($param_val)){
    $type.="i";
    $vals.=$param_val.",";
    }
    else{
    $type.="s";
    $vals.="'".$param_val."',";
    }
    //echo "Param: $param_name; Value: $param_val<br />n";
    $valholder.="?,";
    $params.=$param_name.",";
    }
    }

    }


    $vals = rtrim($vals, ",");
    $params = rtrim($params, ",");
    $valholder = rtrim($valholder, ",");
    $type.= "'";
    echo $type.'<br />';
    echo $vals.'<br />';
    /*** Initialize a statement object for mysqli_stmt_prepare() ***/
    $stmt = mysqli_stmt_init($mysqli);
    /*** prepare the statement ***/
    $sql = 'INSERT INTO myTable ('.$params.') VALUES('.$valholder.')';
    echo $sql.'<br/>';

    if (mysqli_stmt_prepare($stmt, $sql))
        {
        echo 'mysqli successfully prepared<br/>';
        /*** bind the parameters ***/
        }
        else{
        //die( 'stmt error: '.mysqli_stmt_error($stmt) );
        Echo 'error with binding <br />';
        }

        mysqli_stmt_bind_param($stmt,$type,$vals);

        /*** set parameters and execute ***/
    if ( !mysqli_execute($stmt) ) {
          die( 'stmt error: '.mysqli_stmt_error($stmt) );
        }   

   }
else
    {
    /*** if we are unable to connect ***/
    echo 'Unable to connect';
    exit();
    }
?>
 

Вывод эхо-сигнала:

  • Подключено успешно
  • ‘ssi’
  • ‘Оценка 1′,’Ответ 1’,111222333
  • ВСТАВИТЬ В myTable (Оценка, правильные ответы, CRN) ЗНАЧЕНИЯ (?,?,?)
  • mysqli успешно
  • подготовленная ошибка stmt: нет данных, предоставленных для параметров в подготовленном операторе

Чего мне не хватает?