我在 MATLAB 中使用 MySQL,我想从用户那里获取一个名称,并将其传递给 mySQL 中的表,但它拒绝用变量名代替字符串
var_name=input('enter the name:');
mysql('insert into table (name) values (var_name)');
有什么建议吗?
最佳答案
首先 阅读对这个问题的评论 - 你不想用 mysql 注入(inject)安全问题搬起石头砸自己的脚。你被警告了。现在,要解决您当前的问题,而不解决构建 SQL 查询时整个方法的安全风险,请继续阅读...
原则上 Amro 已经为您发布了两个有效的解决方案,但由于您还没有接受它,我将进一步解释。
您的问题是您没有告诉 MATLAB 查询的哪些部分应该解释为文字字符串,哪些部分应该解释为变量名。要解决这个问题,您可以在适当的地方结束文字字符串,即在左括号之后,然后在右括号之前再次开始。
在您想要添加变量的内容 的那些文字字符串之间,因此您需要告诉 MATLAB 将您的文字字符串与您的变量连接起来,因为 mysql 命令可能期望整个查询为一个字符串。所以本质上你想要将字符串“插入表(”和保存在变量 name
中的字符串和字符串“)值(”等等并将它们粘合成一个大字符串。Amro Isaac 已经向您展示了两种解决方案,但没有太多解释:
horzcat('insert into table (', name, ') values (', var_name, ')')
使用函数horzcat , 而
['insert into table (' name ') values (' var_name ')']
利用 MATLAB 将字符串视为字符数组这一事实,因此您只需使用方括号即可形成一个包含一个接一个字符串的大数组。
Amro 提供的第三种解决方案更加巧妙:
sprintf('insert into table (%s) values (%s)',name,var_name)
它告诉函数 sprintf
(这是为此目的而制作的)“将我提供的字符串作为第一个参数,并将 %s
的出现替换为我作为以下参数提供的字符串。最后一种技术特别有用,如果你还需要在您的字符串中插入数字,因为 sprintf
还可以将数字转换为字符串并允许对它们的格式进行精细控制。您应该仔细查看 help page for sprintf 以了解更多信息:- ).
关于mysql - 在 MATLAB 中将查询中的字符串传递给 MySQL 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6768741/