Я очень ценю вашу помощь по моему последнему вопросу. Это связано, но я не хотел скрывать этот вопрос внутри другого. У меня проблема с использованием «DATE_ADD (NOW(), INTERVAL $ interval)» внутри заполнителя. До того, как я использовал заполнители, эта линия работала отлично, а не возвращалась как пустая.mysql placeholder не работает для DATE_ADD (perl)
$store = qq(INSERT INTO main (creator_name,relationship,time) VALUES(?,?,?));
my $sth = $dbh->prepare($store);
$sth->execute($data{creatorname},$data{relationship}, "DATE_ADD(NOW(), INTERVAL $interval)");
Есть ли другой способ добавить DATE_NOW, чтобы он был синтаксически правильным? Я попытался добавить его обратно как
$store = qq(INSERT INTO main (creator_name,relationship,time) VALUES(?,?, DATE_ADD(NOW(), INTERVAL $interval)));
, и он ошибся, говоря, что синтаксис был неправильным. По крайней мере, с кодом сверху, который он выполняет, он просто оставляет значение пустым. С этой попыткой он даже не попытается.
Что такое $ interval? – woolstar
Трудно проверить исправление, не зная больше о вашей настройке, но на первый взгляд похоже, что вы смешиваете синтаксис SQL и значения заполнителя. Токены, такие как 'DATE_ADD' или' NOW', являются выражениями SQL, а не переменными. Каждый «?» -заполнитель - это резерв для одной скалярной переменной. Например, 'DATE_ADD (NOW(), интервал INTERVAL $) может стать' DATE_ADD (NOW(), INTERVAL?) 'С' $ interval' передан 'execute'. Прошлое, я ржав на функциях даты MySQL, но вам нужно [указать единицы на этом интервале] (http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions .html # function_date-надстройка)? – rutter
@rutter, 'DATE_ADD (NOW(), INTERVAL?)' Не будет работать, потому что синтаксис - это DATE_ADD (NOW(), INTERVAL {expr} {unit}) '. Вы можете сделать DATE_ADD (NOW(), INTERVAL? WEEK) ', но не' DATE_ADD (NOW(), INTERVAL?) 'Или' DATE_ADD (NOW(), INTERVAL??) ' – ikegami