我刚刚为正在使用的CAD / MDT创建了一个简单的API,在执行/ citations / userid / 1时,我设法使它显示了正确的信息。然后,这将显示SQL数据库中的所有正确值,但是,如果我执行/ citations / issued_by / kevingorman1000,则只会抛出错误。我无法确定错误是什么,因为我正在使用Slim php,并且似乎无法显示错误。
有什么想法为什么不起作用?我在下面添加了我的代码。
$app->get('/citation/issuedby/{issued_by}', function(Request $request, Response $response){
$issued_by = $request->getAttribute('issued_by');
$sql = "SELECT * FROM ncic_citations WHERE issuedby = $issuedby";
try{
// Get DB Object
$db = new db();
// Call Connection to DB
$db = $db->connect();
$stmt = $db->query($sql);
$issby = $stmt->fetchAll(PDO::FETCH_OBJ);
$db = null;
echo json_encode($issby);
} catch(PDOExecption $e) {
echo '{"error"} : {"text": '.$e->getMessage().'}';
}});
有什么想法为什么会这样?它是否只允许通过号码获取,还是我还需要做其他事情?第一次使用它,对PHP也很新。
感谢您的帮助。
答案 0 :(得分:1)
您的问题称为SQL注入。您可以使用准备好的语句来解决它。像其他人所建议的那样,切勿使用引号或其他任何内容来使值逸出。
$sql = "SELECT * FROM ncic_citations WHERE issuedby = ? ";
$stmt = $db->prepare($sql);
$stmt->execute([$issuedby]);
$issby = $stmt->fetchAll(PDO::FETCH_OBJ);
有关PDO和准备好的语句的良好教程,我建议:https://phpdelusions.net/pdo
答案 1 :(得分:0)
这是因为SQL错误(字符串中缺少引号)。
您尝试发送查询
$sql = "SELECT * FROM ncic_citations WHERE issuedby = kevingorman1000";
必须正确查询
$sql = "SELECT * FROM ncic_citations WHERE issuedby = 'kevingorman1000'";