我正在尝试做什么
我正在尝试做的是,将值从我的 python 应用程序传递到我的 web api,在那里它被保存到我的数据库中。
问题所在
我发布的原因是因为,我可以从我的 python 向我的数据库发送整数 1,2,3,这节省了很多钱。但是如果我发送"测试","猿","树",则数据库中不会放置任何内容。(PS,数据类型为 varchar(6) )
我还可以从浏览器将字符串(使用 post)传递到数据库中,它可以工作。
做了什么
我已经创建了我的API,数据库和python脚本来传递数据。
蟒。
import requests
load={'par':'ape12'} //This doesnt save "ape" to the database
#load={'par':'3'} //This saves "3" to the database
r=requests.post("http://my-server.com/load.php",data=load)
.PHP
<?php
//Connect to DB
include ("connectDB.php");
$loadgot=$_POST['load'];
mysqli_query($con,"INSERT INTO detect(l_result)
VALUES ($loadgot)");
mysqli_close($con);
?>
希望有人能在这方面帮助我。
谢谢
您需要将格式正确的查询传递给 mysql。该值需要用引号括起来,但也需要转义任何将从引号环境中跳出的字符。在实践中,目前最好的解决方案是使用参数化查询(参见示例),如下所示:
$stmt = mysqli_prepare($con, "INSERT INTO detect(l_result) VALUES (?)");
mysqli_stmt_bind_param($stmt, $loadgot);
mysqli_stmt_execute($stmt);
或者,如果您真的想使用文本查询(您真的不应该),您可以执行以下操作:
$loadgot_safe = mysqli_real_escape_string($con, $loadgot);
mysqli_query($con,"INSERT INTO detect(l_result) VALUES ('$loadgot_safe')");
您不得使用的原因:
mysqli_query($con, "INSERT INTO detect(l_result) VALUES ('$loadgot')");
是任何人都可以提交多个值 - 例如value1'), ('value2
将扩展到INSERT INTO detect(l_result) VALUES ('value1'), ('value2')
- 这绝对不是您想要的。
将'ape12'
修改为 "'ape12'"
。
因为,在MySQL中,我们给出了这样的查询
INSERT INTO detect(l_result) VALUES 'Value1';
因此,将值传递给带有引号的MySQL。但不需要整数。
来自@e4c5评论。用户在输入输入时不会给出报价。因此,我们确保脚本内的查询。所以尝试像这样更改代码
mysqli_query($con,"INSERT INTO detect(l_result) VALUES ('$loadgot')");