【发布时间】: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