[英]Executing Python script from PHP and insert in mysql
我有一个 php 脚本,它执行一个 python 脚本并返回数据,它存储在 mysql 中。 它工作正常,但是当数据存储在数据库中时,它会插入一个额外的空白行。 我的问题是,我怎样才能让它只存储我收到的实际数据。
这是python脚本的一部分
##ser.write(sync)
ser.write(counters)
a = ser.read(30)
state = binascii.hexlify(a)
asd = re.sub(rb'([0-9, a-z, A-Z])(?!$)', rb'\1,', state)
url = 'http://127.0.0.1/sastest/meters.php'
x = requests.post(url, data = asd)
print(asd)
这是来自 PHP
passthru("meters.py");
$incomingData = file_get_contents("php://input");
$qry1 = "INSERT INTO machtest(data)
values('".$incomingData."')";
mysqli_query($conn,$qry1);
从评论中我们发现了整个过程:
当我调用meters.php 时,它会激活meters.py 。 meter.py询问设备并将数据发送回meter.php
因为 PHP 的passthru
不支持输出返回,但类似的函数exec
将每一行作为元素作为数组对象,请改用它,并且不要让 Python 回发响应。 当然,在与数据库交互和传递输入值时始终运行参数化。
Python (meters.py)
ser.write(counters)
a = ser.read(30)
state = binascii.hexlify(a)
asd = re.sub(rb'([0-9, a-z, A-Z])(?!$)', rb'\1,', state)
print(asd)
PHP (meters.php)
// USE output ARG
exec(command = "meters.py", output = $incomingData);
// USE PARAMETERIZATION
$qry = "INSERT INTO machtest (data) VALUES (%s)";
$stmt = mysqli_prepare($qry);
mysqli_stmt_bind_param($stmt, "s", $incomingData[0]);
mysqli_stmt_execute($stmt);
或者,让 Python 运行所有处理,包括设备和数据库交互。 然后,让 PHP 调用 .py 脚本:
Python (meters.py)
import mysql.connector # USE ANY MySQL DB-API. THIS IS AN EXAMPLE
...
### INTERROGATE DEVICE
ser.write(counters)
a = ser.read(30)
state = binascii.hexlify(a)
asd = re.sub(rb'([0-9, a-z, A-Z])(?!$)', rb'\1,', state)
### APPEND TO DATABASE
# OPEN CONNECTION AND CURSOR
conn = mysql.connector.connect(host='localhost', database='mydatabase',
user='root', password='pwd')
cur = conn.cursor()
# USE PARAMETERIZATION
qry = "INSERT INTO machtest (data) VALUES (%s)"
cur.execute(qry, (asd,))
conn.commit()
cur.close()
conn.close()
PHP (meters.php)
// NO NEED FOR output
passthru(command = "meters.py");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.