• 28-06-2024, 11:55:38
    #1
    arkadaşlar merhaba, aşağıya kodu bırakıyorum.

    Fatal error: Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number in

    aldığım hata bu,

    eğer bu kısmı

    WHERE (studentNAME LIKE :term 
                       OR studentInstitutionNUMBER LIKE :term 
                       OR studentSSN LIKE :term)
    böyle değiştirirsem bir problem yok,

    WHERE studentNAME LIKE :term
    muhtemelen burada hata var, bir türlü çözemedim.
     $params = [
            ':term' => '%' . $searchTerm . '%',
            ':institutionId' => $institutionId
        ];

    <?php
    include 'config/config.php'; // Veritabanı bağlantısını sağlayan dosya
    
    session_start();
    
    $institutionId = isset($_SESSION['id']) ? $_SESSION['id'] : null;
    
    if (!$institutionId) {
        http_response_code(401);
        echo json_encode(["error" => "Yetkisiz erişim."]);
        exit;
    }
    
    $searchTerm = isset($_GET['term']) ? $_GET['term'] : '';
    
    try {
        // SQL sorgusunu hazırlama
        $sql = "SELECT studentID, studentNAME, studentSURNAME, studentInstitutionNUMBER, studentSSN 
                FROM students 
                WHERE (studentNAME LIKE :term 
                       OR studentInstitutionNUMBER LIKE :term 
                       OR studentSSN LIKE :term)
                  AND studentInstitutionID = :institutionId";
        
        // PDO statement hazırlama
        $stmt = $pdo->prepare($sql);
    
        // Parametreleri bağlama
        $params = [
            ':term' => '%' . $searchTerm . '%',
            ':institutionId' => $institutionId
        ];
    
        // Sorguyu çalıştırma
        $stmt->execute($params);
    
        // Sonuçları alıp JSON olarak dönme
        $results = $stmt->fetchAll(PDO::FETCH_ASSOC);
        echo json_encode($results);
    } catch (PDOException $e) {
        // Hata durumunda PDO istisnasını yakalama
        echo "Veritabanı hatası: " . $e->getMessage();
    }
    ?>
  • 28-06-2024, 12:04:22
    #2
    Term as name'ini 2 farklı veri için kullanacaksan ya term1 term2 diye ayır ya da bindparam kullan
  • 28-06-2024, 12:05:56
    #3
    barisdongel adlı üyeden alıntı: mesajı görüntüle
    Term as name'ini 2 farklı veri için kullanacaksan ya term1 term2 diye ayır ya da bindparam kullan
    $stmt->bindParam(':term', $searchTerm, PDO::PARAM_STR);

    bind param olarak kullandığımda da aynı hatayı alıyorum
  • 28-06-2024, 12:08:46
    #4
    ayrı ayrı kullandığımda da boş çıktı veriyor
  • 28-06-2024, 12:10:22
    #5
    Kurumsal PLUS
    :term kısmını 3 kez kullandığın için oluyor olmalı. Farklı değişken isimleri kullanıp params eşleşmesinde farklı isimlerle eşleştirmeyi dene.

    Örnek:
    studentNAME LIKE :nameTerm
    OR studentInstitutionNUMBER LIKE :numberTerm
    OR studentSSN LIKE :ssnTerm

    params kısmında da bu isimlere göre eşleşme sağlarsan sorun çözülecektir.
    $params = [
    ':nameTerm' => '%' . $searchTerm . '%',
    ':numberTerm' => '%' . $searchTerm . '%',
    ':ssnTerm' => '%' . $searchTerm . '%',
    ':institutionId' => $institutionId
    ];
  • 28-06-2024, 12:14:40
    #6
    webexpert22 adlı üyeden alıntı: mesajı görüntüle
    :term kısmını 3 kez kullandığın için oluyor olmalı. Farklı değişken isimleri kullanıp params eşleşmesinde farklı isimlerle eşleştirmeyi dene.

    Örnek:
    studentNAME LIKE :nameTerm
    OR studentInstitutionNUMBER LIKE :numberTerm
    OR studentSSN LIKE :ssnTerm

    params kısmında da bu isimlere göre eşleşme sağlarsan sorun çözülecektir.
    $params = [
    ':nameTerm' => '%' . $searchTerm . '%',
    ':numberTerm' => '%' . $searchTerm . '%',
    ':ssnTerm' => '%' . $searchTerm . '%',
    ':institutionId' => $institutionId
    ];
    evet verdiğiniz kod işe yaradı, fakat bindParam kullanınca sorun çıkartmaması lazımdı, yine de teşekkür ederim
  • 28-06-2024, 12:33:59
    #7
    https://www.php.net/manual/en/pdo.pr...mode%20is%20on.

    bindParam yerine bindValue kullanmayı ya da PDO'nün emülasyon modunu açmayı deneyebilirsin.
  • 28-06-2024, 12:42:21
    #8
    $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);
    sorgudan önce bunu ekleyip dener misin