#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: нет данных, предоставленных для параметров в подготовленном операторе
Чего мне не хватает?