API 不允许文本

API doesn't allow text

我刚刚为我正在处理的 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 也有点陌生。

感谢您的帮助。

这是因为 SQL 错误(字符串周围缺少引号)。

您尝试发送查询

$sql = "SELECT * FROM ncic_citations WHERE issuedby = kevingorman1000";

正确的查询必须是

$sql = "SELECT * FROM ncic_citations WHERE issuedby = 'kevingorman1000'";

你的问题叫做SQL注入。您可以使用准备好的语句来解决它。永远不要像其他人建议的那样用引号或其他任何东西转义值。

$sql = "SELECT * FROM ncic_citations WHERE issuedby = ? ";
$stmt = $db->prepare($sql);
$stmt->execute([$issuedby]);
$issby = $stmt->fetchAll(PDO::FETCH_OBJ);

有关 PDO and prepared statements I recommend: https://phpdelusions.net/pdo

的精彩教程