Warning: mysqli_stmt:: bind_param (): Number of elements in type definition string doesn't матч number of bind переменные in/pg2.php он-лайн 318

Я пишу решение 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

Какая-то подсказка?

0
задан 15.11.2016, 01:10
3 ответа

В конце концов, друзья, я нашел, каковым был недостаток, и я это описываю для тех, которые проходят по этой же самой проблеме. Почти три дня борясь с кодом, чтобы находить этот ответ:

Решение, которое я писал эра:

$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 без какой-либо другой ошибки в коде.

Очевидно это был вопрос капризного синтаксиса этой функции, но которая конечно должна сохранять какую-то логику.

Благодаря тем, кому они дали мне какие-то отпечатки, и что подал тех, кто могут нуждаться в этом.

2
ответ дан 24.11.2019, 12:36

Есть 31 вопросительный знак, но 32 типа стоимости в твоих параметрах.

0
ответ дан 24.11.2019, 12:36
  • 1
    Начнись с cpo1 и прибывает к cpo 31 следовательно, это 31 pará метры и 31 знак interrogació n. Не приноси осмотрительной пользы. – Odnumi Oilgav 15.11.2016, 22:20

Я оставляю тебе пример, как ты можешь создавать доклад ошибок, чтобы работать с заявлениями, приготовьте ()

С этим маленьким докладом ты сможешь знать, где сохраняется неудача или в тебе 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();

Относительно неудачи, он говорит это тебе на английском: Число элементов в цепи определения типа не совпадает с числом переменных.

0
ответ дан 24.11.2019, 12:36
  • 1
    Большое спасибо D.Bulten из-за этого có я говорю, чтобы санкционировать ошибки, действительно он я пошел ú til для có я говорю, хотя не resolvió проблема. – Odnumi Oilgav 17.11.2016, 00:23
  • 2
    Ничего, от тебя избавляет работа поисков часто. Ты можешь пересылать первоначальный код, с решения SQL, так в простой вид не видна никакая ошибка. Проверенный эксперт также перемещать прямой тип (iiisds...) в bind_param, без изменчивая $ tipo_var? – D.Bulten 17.11.2016, 01:11
  • 3
    Не было необходимо заменять эту переменную так как, funcionó верно, проблема tení когда, в данные пробуют посылать, что querí чтобы грузить в BD, не будучи внутри переменной. Тема состоит в том, что его требуют, его признавать переменную из-за каждых ? , но функционируй верно в этом моменте. Спасибо! – Odnumi Oilgav 17.11.2016, 01:26
  • 4
    Я радуюсь. Не за что. – D.Bulten 17.11.2016, 01:30

Теги

Похожие вопросы