【问题标题】:Using Post to access SQL database from Python through PHP使用 Post 通过 PHP 从 Python 访问 SQL 数据库
【发布时间】:2017-04-19 02:54:41
【问题描述】:

我有一个 Python 插件,我需要使用它连接到远程 MySQL 服务器。这个插件将在多个生产设备上,并且源是开放的,所以我不希望数据库信息存储在那里。所以我正在尝试使用 PHP Web 服务来获取数据,并使用发布请求来访问它。当 python 脚本运行时,它会给出一个错误并说 No JSON object could be decoded。

这是 PHP 代码(SQL 连接凭据已编辑):

$con = mysqli_connect('url', 'user', 'pass', 'db') or die('Connection Failed');

$mac = $_POST['mac'];

$result = mysqli_query($con, "SELECT 1 FROM `Boxes` WHERE `MAC` = '$mac'");
$rows = $result->num_rows;
if ($rows != 0) {
    $response['Result'] = "Registered";
} else {
    $response['Result'] = "Not Registered";
}

json_encode($response);
mysqli_close($con);

这里是 Python 代码:

params = {'mac': mac}
r = requests.post("http://lastboxusa.com/php/LCheckReg.php", data=params)
data = r.json()
return data['Result'] == "Registered"

最后,这是完整的堆栈跟踪:

Error Type: <type 'exceptions.ValueError'>
Error Contents: No JSON object could be decoded
Traceback (most recent call last):
File "C:\Users\ncben\AppData\Roaming\Kodi\addons\service.lastboxmanagement\addon.py", line 94, in <module> if checkreg(mac):
File "C:\Users\ncben\AppData\Roaming\Kodi\addons\service.lastboxmanagement\addon.py", line 35, in checkreg data = r.json()
File "C:\Users\ncben\AppData\Roaming\Kodi\addons\script.module.requests\lib\requests\models.py", line 850, in json return complexjson.loads(self.text, **kwargs)
File "C:\Program Files (x86)\Kodi\system\python\Lib\json\__init__.py", line 339, in loads return _default_decoder.decode(s)
File "C:\Program Files (x86)\Kodi\system\python\Lib\json\decoder.py", line 364, in decode obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "C:\Program Files (x86)\Kodi\system\python\Lib\json\decoder.py", line 382, in raw_decode raise ValueError("No JSON object could be decoded")

我对 PHP 很陌生,所以(我希望)这可能是我的 PHP 中的一些愚蠢的错误。任何帮助将不胜感激。

【问题讨论】:

  • 几件事,不要这样做"SELECT 1 FROM `Boxes` WHERE `MAC` = '$mac'",您需要在$mac 上绑定参数,因为它是用户可操作/可操作的。其次,添加一个您知道会在 php 页面上生成结果的值。确保首先有效。最后,您需要echo json_encode($response); 而不仅仅是json_encode($response);
  • 我以前在那里有回声,但它没有改变任何东西。原来问题是我输错了密码...感谢您的帮助

标签: php python mysql web-services


【解决方案1】:

json_encode($response); 行应该是 echo json_encode($response);

但更重要的是,密码要输入正确。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-13
    • 2013-11-07
    • 2014-10-16
    • 2021-11-15
    • 1970-01-01
    • 1970-01-01
    • 2011-09-11
    • 2016-04-21
    相关资源
    最近更新 更多