我有一个 php 脚本,它在服务器上执行命令,例如:
exec('sudo unoconv -f pdf '.$file, $output, $return);
然后我检查脚本是否成功执行:
if(!$return) { Do something here } else{ $errormsg = var_export($output, true); }
错误消息可能类似于以下内容:
array ( 0 => 'Error: /invalidfileaccess in pdf_process_Encrypt', 1 => 'Operand stack:', 2 => '', 3 => 'Execution stack:', 4 => ' %interp_exit .runexec2 --nostringval-- --nostringval-- --nostringval-- 2 %stopped_push --nostringval-- --nostringval-- --nostringval-- false 1 %stopped_push 1910 1 3 %oparray_pop 1909 1 3 %oparray_pop 1893 1 3 %oparray_pop --nostringval-- --nostringval-- --nostringval-- --nostringval-- false 1 %stopped_push', 5 => 'Dictionary stack:', 6 => ' --dict:1162/1684(ro)(G)-- --dict:1/20(G)-- --dict:82/200(L)-- --dict:82/200(L)-- --dict:109/127(ro)(G)-- --dict:291/300(ro)(G)-- --dict:20/31(L)--', 7 => 'Current allocation mode is local', )
然后我尝试将错误消息存储到我的 MySql 数据库中:
mysqli_query($con, "INSERT INTO incidents (operation, date, error) VALUES ('convert', '$date', '$errormsg')");
列error
的数据类型为VARCHAR(),当我执行上述查询时,如果我从上述命令中删除$errormsg
,则不会将任何内容插入数据库中数据已成功插入数据库。我应该为该列使用哪种数据类型以便插入错误消息?
最佳答案
该方法似乎返回一个字符串。这段代码
<?php
$var = ['test' => 'ja'];
$result = var_export($var, true);
echo gettype($result);
打印“字符串”以输出。据我了解,此方法返回有效的 PHP 代码作为字符串。
我猜想,问题与此函数无关,而是与 SQL 查询或用于存储信息的代码有关。
更新:我看到您发布了更新。问题是,您既没有转义字符串,也没有使用准备好的语句。我建议您使用准备好的语句而不是字符串插值。这也与安全问题有关。
参见 mysqli_real_escape_string 甚至更好的 mysqli_prepare
关于php - 将var_export保存到MySql数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50357686/