Php MySQL,在插入with prepared语句时默认不工作

Php MySQL,在插入with prepared语句时默认不工作,php,mysql,insert,prepared-statement,Php,Mysql,Insert,Prepared Statement,我希望使用准备好的语句运行insert命令,其中列应使用其默认值 这是一张桌子 CREATE TABLE food (italian VARCHAR(50) NOT NULL DEFAULT 'pasta') Engine MyISAM; 下面是一些MySQL命令 PREPARE statement FROM 'INSERT INTO food VALUES(?)'; SET @italian = DEFAULT; EXECUTE statement USING @italian; 我在SE

我希望使用准备好的语句运行insert命令,其中列应使用其默认值

这是一张桌子

CREATE TABLE food (italian VARCHAR(50) NOT NULL DEFAULT 'pasta') Engine MyISAM;
下面是一些MySQL命令

PREPARE statement FROM 'INSERT INTO food VALUES(?)';
SET @italian = DEFAULT;
EXECUTE statement USING @italian;
我在
SET@意大利语=DEFAULT处得到一个语法错误

但是,如果我运行以下命令

INSERT INTO food VALUES(DEFAULT);
…没有语法错误。插入“意大利面”的默认值没有问题


预处理语句语法有什么问题?

我不知道您的目标是什么,但:

PREPARE statement FROM 'INSERT INTO food VALUES(?)';
SET @italian = NULL;
EXECUTE statement USING @italian;

默认值是一个文本,而您正试图使用一个变量。传入NULL值,表中定义的DEFULT“意大利面”将应用于insert。@xQbert我将列设置为NOTNULL,因此如果我尝试这样做,MySQL会抛出一个错误,说“意大利面不能为NULL”。似乎已经解决了。@xQbert虽然这个问题很相似,但他们的情况/解决方案使用pdo和Coalesce以及我希望不需要使用的各种东西。这看起来应该很简单。我想准备一条语句,每次执行它时,决定是使用显式值还是默认值。必须有一个简单的方法来实现这一点。我将列设置为
notnull
,因此如果我尝试执行上述语句,MySQL会抛出一个错误,说“意大利语不能为NULL”。我之所以将其设置为
notnull
,是因为如果我不这样做,上面的语句会将意大利语设置为NULL,而不是它的默认值“意大利面”。我的目标在我的帖子的第一句话中陈述了。你能试试:
executestatement?如果我使用
执行语句时使用@意大利语
它给出了我上面提到的错误:
列“意大利语”不能为空
如果我只是键入
EXECUTE语句然后错误是执行的参数不正确(你真的需要执行这个例子吗?虽然我喜欢意大利食物,但这个例子是一个虚构的例子。我只是想从概念上知道,
INSERT-INTO-tablename值(默认值)的“Prepare语句”等价物是什么语句。