Я пишу решение INSERT и у меня есть ошибка, которую мне не удается решить в следующей инструкции:
$stmt->bind_param("$tipo_var", $insert_valores);
Случается, что изменчивая $ tipo_var идет entrecomillada, чтобы добиваться, чтобы остались entrecomillados типы каждого элемента "statement", который я посылаю MySQL.
Реальные данные, которых получает система:
$stmt->bind_param('iiisssssssdiiiddsssidddssssssss',
2016, 2, 1, 'texto1', 'texto2', 'texto3', 'texto4', 'texto5', 'texto6',
'texto7', 0.01, 1, 1, 1, 0.01, 0.01, 'texto8', 'texto9', 'texto10', 11,
0.01, 0.01, 0.01, 'texto11', 'texto12', 'texto13', 'texto14', 'texto15',
'texto16', 'texto17', 'texto18')
А именно, я не нахожу, что существовала реальная ошибка между цепью типов и посланными параметрами, состоя в том, что уважает порядок каждого типа vs посланная переменная.
Связь в BD и типы, соответствующие каждой информации, которая послана в BD, они правильны, но мне продолжает давать эта ошибка:
Warning: mysqli_stmt:: bind_param (): Number of elements in type definition string doesn't матч number of bind переменные in/pg2.php он-лайн 318
Какая-то подсказка?
В конце концов, друзья, я нашел, каковым был недостаток, и я это описываю для тех, которые проходят по этой же самой проблеме. Почти три дня борясь с кодом, чтобы находить этот ответ:
Решение, которое я писал эра:
$stmt->bind_param('iiisssssssdiiiddsssidddssssssss',
2016, 2, 1, 'texto1', 'texto2', 'texto3', 'texto4', 'texto5', 'texto6',
'texto7', 0.01, 1, 1, 1, 0.01, 0.01, 'texto8', 'texto9', 'texto10', 11,
0.01, 0.01, 0.01, 'texto11', 'texto12', 'texto13', 'texto14', 'texto15',
'texto16', 'texto17', 'texto18');
И действительно он был бы правильным, если бы "bind_param ()" он позволил перемещать стоимость в прямой форме. Верное состоит в том, что необходимо посылать переменную из-за каждой стоимости, которая послана, не возможно посылать стоимость "обнаженную" а герметизируемую в корпусе внутри переменной.
А именно, правильная манера посылать решение была:
$stmt->bind_param('iiisssssssdiiiddsssidddssssssss', $int1, $int2,
$int3, $string1, $string2, $string3, $string4, $string5, $string6,
$string7, $double1, $int4, $int5, $int6, $double2, $double3, $string8,
$string9, $string10, $int7, $double4, $double5, $double6, $string11,
$string12, $string13, $string14, $string15, $string16, $string17,
$string18);
Таким образом, была загружена информация в BD без какой-либо другой ошибки в коде.
Очевидно это был вопрос капризного синтаксиса этой функции, но которая конечно должна сохранять какую-то логику.
Благодаря тем, кому они дали мне какие-то отпечатки, и что подал тех, кто могут нуждаться в этом.
Есть 31 вопросительный знак, но 32 типа стоимости в твоих параметрах.
Я оставляю тебе пример, как ты можешь создавать доклад ошибок, чтобы работать с заявлениями, приготовьте ()
С этим маленьким докладом ты сможешь знать, где сохраняется неудача или в тебе sentencia SQL
, ligando parametros marcadores
или ejecutando sentncia
.
//Sentencia prepare.
$stmt = $conexion->prepare("INSERT INTO tutabla (id,nombre,ip) VALUES (?,?,?)");
// dado que todas las operaciones siguientes necesitan un objeto de sentencia válido.
if ( false===$stmt ) {
exit('prepare() failed: ' . htmlspecialchars($stmt->error));
}
$rc= $stmt->bind_param("iss",$id,$nombre,$ip_adres);
//nuevamente execute () es inútil si no puedes enlazar los parámetros.
if ( false===$rc ) {
exit('bind_param() failed: ' . htmlspecialchars($stmt->error));
}
$rc=$stmt->execute();
// execute () puede fallar por varias razones. Y puede ser tan estúpido como alguien trompiezo con el cable de red.
if ( false===$rc ) {
exit('execute() failed: ' . htmlspecialchars($stmt->error));
}
$stmt->close();
Относительно неудачи, он говорит это тебе на английском: Число элементов в цепи определения типа не совпадает с числом переменных.