将字符串值从 Python 请求传递到 PHP 时出错


Error when Passing string values from Python request to PHP

我正在尝试做什么

我正在尝试做的是,将值从我的 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')");