Эта проблема поставила меня в тупик, я просмотрел другие ответы на вопросы о переполнении стека, и ни один из них не ответил на мой вопрос.
**
**
function inputVCA(){
global $dbh;
$count = 0;
if(isset($_POST['vca'])){
$pcid = mysql_real_escape_string($_POST['ID']);
$vca = $_POST['vca'];
$tok = strtok($vca, ";");
while($tok !== false){
$countNew = countDataToHour($count);
$stmt = $dbh->prepare("UPDATE $pcid SET $countNew = :token WHERE ID='1'");
$stmt -> bindParam(':token', $tok);
echo "<br>".$pcid."<br>";
echo countDataToHour($count)."<br>";
echo $tok."<br>";
if($stmt->execute()){
// do nothing
}else{
die("failed to execute query");
}
$count++;
$tok = strtok(";");
}
}
}
**
**
888
00:00
40
Предупреждение: PDOStatement :: execute (): SQLSTATE [HY093]: недопустимый номер параметра: число связанных переменных не соответствует количеству токенов в C: \ xampp \ htdocs \ practice \ src \ dataChecker.php в строке 170
не удалось выполнить запрос
**
**
Причина, по которой я так озадачена этой проблемой, заключается в том, что когда я проверяю переменные и т. Д., Кажется, все выводится правильно Тем не мение:
**
**
Одна часть моей программы, в которой я не уверен, это:
WHERE ID='1'
в моем запросе sql. Причина, по которой я это делаю, заключается в том, что на данный момент мне понадобится только одна строка в таблице sql.
Любая помощь приветствуется, спасибо :). Кроме того, как знаменатель, тот, кто проголосовал за меня, не должен иметь права голосовать за кого-либо. Я представил свою проблему очень четко. Мой php-код немного отрывочен, но если вы проголосуете за меня по этой причине, это непродуктивно и может отговорить новых пользователей размещать вопросы на этом сайте. Если новые пользователи не приходят, то вы будут проиграть другим конкурентам. Спасибо всем, кто внес полезный вклад.
Во-первых, PDO и mysql_
эти два API не смешиваются вместе.
Удалить mysql_real_escape_string
,
Удалить цитаты вокруг этого $count = ':token'
читать как $count = :token
(заполнители не могут иметь кавычки вокруг них).
Вы должны будете поставить галочки вокруг вашего $pcid
в ОБНОВЛЕНИИ, в сочетании с другими моими предложениями в моих комментариях и моим ответом здесь.
$pcid = $_POST['ID'];
...
$stmt = $dbh->prepare("UPDATE `$pcid` SET `$countNew` = :token WHERE ID='1'");
...
Это сообщение об ошибке согласно одному из ваших комментариев:
Версия сервера MySQL для правильного использования синтаксиса около ‘888 SET 00:00 =’: token ‘WHERE ID =’ 1 » в строке 1 ‘
Посмотрите, что говорит вам ошибка, near '888
и эти ошибки не остановятся на этом.
Имена таблиц не могу начать с числа или быть включительно состоит из чисел.
Согласно документации:
Идентификаторы могут начинаться с цифры, но если они не указаны, они могут состоять не только из цифр.
Заполнители могут представлять только ЦЕННОСТИ в запросе. Никогда не имя поля / таблицы или другое ключевое слово SQL.
UPDATE :pcid SET :count = ':token' WHERE ID='1'
^^^^^--field ^^^^^^--value
^^^^^--field
Если вы хотите динамически вставлять имена таблиц / полей, вам придется использовать старые добрые методы, уязвимые для SQL-инъекций, такие как
$table = $source_of_pcid
$field = $source_of_count
$sql = "UPDATE $table SET $field = :token";