API不允许文字

时间:2019-06-12 20:06:01

标签: php rest slim-3

我刚刚为正在使用的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也很新。

感谢您的帮助。

2 个答案:

答案 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'";