API не позволяет текст - PullRequest
0 голосов
/ 12 июня 2019

Я только что создал простой API для CAD / MDT, над которым я работаю, мне удалось заставить его отображать правильную информацию, когда я делаю / citations / userid / 1.Затем будут отображены все правильные значения из базы данных SQL, однако, если я сделаю / citations /.Did_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 ]

1 голос
/ 12 июня 2019

Ваша проблема называется 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

0 голосов
/ 12 июня 2019

Это потому, что ошибка SQL (пропущены кавычки вокруг строки).

Вы пытаетесь отправить запрос

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

Правильный запрос должен быть

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