ACRA 将报告插入我服务器的数据库
ACRA Insert report into my server's database
我成功配置 ACRA 将我捕获的异常发送到我的服务器,问题是我无法将报告插入数据库:
@AcraCore(buildConfigClass = BuildConfig.class)
@AcraHttpSender(uri = "http://www.myserver.com/crashreports/addreport.php",
httpMethod = HttpSender.Method.POST)
public class MyApplication extends Application {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
ACRA.init(this);
}
}
我知道它发送了一些东西,因为我在 phpMyAdmin
中看到一个空条目,但我无法在数据库中获取报告:
<?php
$link = mysqli_connect("localhost", "root", "pass", "db");
// Check connection
if($link === false){
die("ERROR: Could not connect. " . mysqli_connect_error());
}
// Escape user inputs for security
$report = mysqli_real_escape_string($link, $_REQUEST['']);
// attempt insert query execution
$sql = "INSERT INTO VoiceRemoteCrash (report) VALUES ('$report')";
if(mysqli_query($link, $sql)){
echo "Records added successfully.";
} else{
echo "ERROR: Could not able to execute $sql. " . mysqli_error($link);
}
// close connection
mysqli_close($link);
?>
我搜索过文档,但没有找到太多信息,而且我的 PHP
知识有些基础。
这一行引用了一个无意义的变量:
$report = mysqli_real_escape_string($link, $_REQUEST['']);
你想要这样的东西:
$report = mysqli_real_escape_string($link, $_REQUEST['form_variable_name']);
但你甚至不应该那样做,因为不能依赖 real_escape_string()
函数来防止 SQL 注入。相反,您应该使用带有绑定参数的准备好的语句,通过 mysqli or PDO driver. This post 有一些很好的例子。
$_REQUEST['']
将 returns NULL
并将抛出 "undefined index" 通知。
您可以使用 file_get_contents('php://input')
从 POST 原始数据中获取报告。
我建议您查看:How can I prevent SQL injection in PHP? 并使用参数化查询。
我成功配置 ACRA 将我捕获的异常发送到我的服务器,问题是我无法将报告插入数据库:
@AcraCore(buildConfigClass = BuildConfig.class)
@AcraHttpSender(uri = "http://www.myserver.com/crashreports/addreport.php",
httpMethod = HttpSender.Method.POST)
public class MyApplication extends Application {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
ACRA.init(this);
}
}
我知道它发送了一些东西,因为我在 phpMyAdmin
中看到一个空条目,但我无法在数据库中获取报告:
<?php
$link = mysqli_connect("localhost", "root", "pass", "db");
// Check connection
if($link === false){
die("ERROR: Could not connect. " . mysqli_connect_error());
}
// Escape user inputs for security
$report = mysqli_real_escape_string($link, $_REQUEST['']);
// attempt insert query execution
$sql = "INSERT INTO VoiceRemoteCrash (report) VALUES ('$report')";
if(mysqli_query($link, $sql)){
echo "Records added successfully.";
} else{
echo "ERROR: Could not able to execute $sql. " . mysqli_error($link);
}
// close connection
mysqli_close($link);
?>
我搜索过文档,但没有找到太多信息,而且我的 PHP
知识有些基础。
这一行引用了一个无意义的变量:
$report = mysqli_real_escape_string($link, $_REQUEST['']);
你想要这样的东西:
$report = mysqli_real_escape_string($link, $_REQUEST['form_variable_name']);
但你甚至不应该那样做,因为不能依赖 real_escape_string()
函数来防止 SQL 注入。相反,您应该使用带有绑定参数的准备好的语句,通过 mysqli or PDO driver. This post 有一些很好的例子。
$_REQUEST['']
将 returns NULL
并将抛出 "undefined index" 通知。
您可以使用 file_get_contents('php://input')
从 POST 原始数据中获取报告。
我建议您查看:How can I prevent SQL injection in PHP? 并使用参数化查询。