Intereting Posts
Предотвращение входа пользователей из неавторизованной области ReCaptcha неправильно работает на iPhone PHP: отправка почты со ссылкой Добавить значение для URL-адреса в форме Отправить с помощью JQuery Функция обратного вызова функции Javascript для php-кода Как отключить PHP-уведомления? Как подсчитать СЕССИИ, чтобы отобразить общее количество зарегистрированных пользователей на сайте Корзина Есть ли у PHP функция, которая возвращает правильное расширение файла с учетом допустимого типа содержимого? Значение сеанса только после перезагрузки страницы Почему Code Igniter дает мне белую страницу? Интеграция PayPal, как я могу определить учетную запись получателя? Неустранимая ошибка: исключить исключение «RedisException» с сообщением «Redis server ушел» PHP Base 64 Данные изображения не работают в теге изображения? Не удается найти индекс FULLTEXT, соответствующий списку столбцов (установлены индексы)

mysqli bind_param дает ошибку: (1210) Неправильные аргументы mysql_stmt_execute

У меня этот точный код отлично работает на другом сервере:

$mysqli_Cxn = new mysqli($SQL_HOST,$SQL_USER,$SQL_PASS,$SQL_DB); if($mysqli_Cxn->connect_errno){ echo 'Unable to connect!!'; exit(); } $userID=12345; $userFirstName = 'Charley'; $userLocale = 'en_US'; $sql = "UPDATE userProfile SET userFirstName=?, userLocale=? WHERE id=?"; if($stmt = $mysqli_Cxn->prepare($sql)){ if(!$stmt->bind_param('ssi',$userFirstName,$userLocale,$userID)){ echo "<br/><br/>Binding parameters failed: (" . $stmt->errno . ") " . $stmt->error; } if($stmt->execute()){ totalAffected=$stmt->affected_rows; if($totalAffected>=1){ echo '<br/><br/>UPDATE OK: Affected rows = '. $totalAffected; } }else{ echo "Execute failed: (" . $stmt->errno . ") " . $stmt->error; } } $stmt->close(); 

Этот код дает мне следующий результат: Execute failed: (1210) Неверные аргументы mysql_stmt_execute

Если я изменю эти две строки:

 $sql = "UPDATE userProfile SET userFirstName=?, userLocale=? WHERE id=?"; $stmt->bind_param('ssi',$userFirstName,$userLocale,$userID); 

к этому:

 $sql = "UPDATE userProfile SET userFirstName=?, userLocale='en_US' WHERE id=12345"; $stmt->bind_param('s',$userFirstName); 

… то обновление успешно, и я не получаю никаких ошибок.

Кто-нибудь знает, почему я не могу связать больше одного параметра в этом коде?

У меня этот код работает отлично на Centos 4.9, PHP 5.3.3, MySQL 5.0.91 / 5.0.91-community-log

Мне нужно запустить его на моем текущем сервере, который является Centos 6.2, PHP 5.3.10, MySQL 5.0.95-community-log

Я провел небольшое исследование, и похоже, что в источнике MySQL появилась ошибка в сочетании с вашей версией GCC и используемыми вами флагами оптимизации. Если вы не можете изменить версию MySQL, попробуйте перекомпилировать MySQL с добавлением -fno-strict-aliasing к вашему CFLAGS.

См. http://bugs.mysql.com/bug.php?id=48284 для получения более подробной информации.

Заключительные замечания по этому вопросу.

Я получил новый сервер и выполнил следующую конфигурацию:

 PHP 5.3.10 MySQL 5.1.61-cll 

Я разрешаю новому серверу принимать внешние соединения и проверять один и тот же код на первом сервере (на этот раз заменяя «localhost» на IP-адрес нового сервера).

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

Наконец, я протестировал код (с множественным запросом paramater) на новом сервере, и он работал без каких-либо проблем.

Моей логикой может быть не так, но я думаю, проблема связана с клиентской версией mysqli:

первый сервер:

 printf("Client library version: %d\n", mysqli_get_client_version()); //Output: //Client library version: 50095 

новый сервер:

 printf("Client library version: %d\n", mysqli_get_client_version()); //Output: //Client library version: 50161 

Поэтому я могу сделать две рекомендации:

  1. Сделайте себе одолжение и перейдите к PDO
  2. Хотите / Должны придерживаться только mysqli? Убедитесь, что клиентская версия клиента mysqli не является 50095

Спасибо всем комментариям / помощи!

PS: Я использую серверы VPS с CPanel. Я попытался перекомпилировать клиента mysqli, используя EasyApache в WHM на первом сервере, и, будучи полным noob, – я предполагаю, что я застрял с версией, предоставляемой через Cpanel (до моего следующего обновления).

Я хотел бы предложить вам, чтобы явным образом $userID целому числу и повторно тестировал, если он все еще терпит неудачу.

Поскольку переменные PHP являются вариантами по умолчанию, возможно, у вас возникают проблемы при привязке к запросу не string (целое в этом случае).

Ты можешь попробовать:

 $sql = "UPDATE userProfile SET userFirstName=?, userLocale=? WHERE id=?"; $stmt->bind_param('ssi',$userFirstName,$userLocale,(int)$userID); 

Я столкнулся с той же проблемой.

(Параметры привязки не принимали более одного параметра)

Моя версия mysql с помощью этой команды:

 printf ("Client library Version:% d \ n", mysqli_get_client_version ()); 

было: 50094

Версия 50095 касается этой проблемы:

https://www.liketly.com/forum/thread/27005/mysqli-bind_param-giving-error-1210-incorrect-arguments-to-mysql_stmt_execute/

После обновления с PHP 5.4 до 5.6 (на общем сервере) была обновлена ​​также версия mysql, и проблема исчезла.

Моя новая версия mysql – 50011