我有一个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
,则数据已成功插入到数据库中数据库。我应该为列使用哪种数据类型,以便插入错误消息?
答案 0 :(得分:1)
该方法似乎返回一个字符串。这段代码
<?php
$var = ['test' => 'ja'];
$result = var_export($var, true);
echo gettype($result);
输出“string”。据我所知,此方法将有效的PHP代码作为字符串返回。
我猜,问题与此函数无关,而是与SQL-Query或用于存储信息的代码有关。
更新:我看到,您发布了更新。问题是,您既没有转义字符串也没有使用预准备语句。我建议您使用预处理语句而不是字符串插值。这也与安全问题有关。
请参阅mysqli_real_escape_string或更好的mysqli_prepare