<?php
include('config.php');
$request_uri = $_SERVER['REQUEST_URI'];
$path = parse_url($request_uri, PHP_URL_PATH);
$path = str_replace('-sarki-sozleri', '', $path);
$path_parts = explode('/', trim($path, '/'));
$baslik_url = end($path_parts);
$wisex = ucwords(str_replace('-', ' ', $baslik_url));
$sorgu = $baglanti->prepare("SELECT * FROM sarkilar WHERE baslik LIKE '%$wisex%'");
$sorgu->execute();
$sonuc = $sorgu->fetch(); // sorgu çalıştırılıp veriler alınıyor
?>üstteki kodda $baslik verisi Hande Yener Aci Veriyor olarak geliyor ancak veritabanındaki baslik verisi Hande Yener - Acı Veriyor normalde tüm projelerimde LIKE sql sorgusunda veri geliyordu bu projemde veri gelmiyor nerde hata yapıyorum?
PHP WHERE Sorunu
11
●264
- 24-07-2024, 20:23:28Merhabalar,
- 24-07-2024, 20:26:50//%90 Karakter set uyumsuzluğundan kaynaklanıyor diye düşünüyorum LIKE ile eşleştirme yaparken dikkat etmen gerekli buna
include('config.php');
$request_uri = $_SERVER['REQUEST_URI'];
$path = parse_url($request_uri, PHP_URL_PATH);
$path = str_replace('-sarki-sozleri', '', $path);
$path_parts = explode('/', trim($path, '/'));
$baslik_url = end($path_parts);
$wisex = ucwords(str_replace('-', ' ', $baslik_url));
$baglanti->exec("SET NAMES 'utf8'");
$baglanti->exec("SET CHARACTER SET utf8");
$baglanti->exec("SET COLLATION_CONNECTION = 'utf8_unicode_ci'");
$sorgu = $baglanti->prepare("SELECT * FROM sarkilar WHERE baslik LIKE :baslik");
$sorgu->bindValue(':baslik', "%$wisex%");
$sorgu->execute();
$sonuc = $sorgu->fetch();
if ($sonuc) {
// Veriler bulundu
print_r($sonuc);
} else {
// Veriler bulunamadı
echo "Veri bulunamadı.";
} - 24-07-2024, 20:27:49Maalesef Veri Bulunamadı.LetsDuoLimited adlı üyeden alıntı: mesajı görüntüle
- 24-07-2024, 20:29:16wisex adlı üyeden alıntı: mesajı görüntüle
<?php include('config.php'); $request_uri = $_SERVER['REQUEST_URI']; $path = parse_url($request_uri, PHP_URL_PATH); $path = str_replace('-sarki-sozleri', '', $path); $path_parts = explode('/', trim($path, '/')); $baslik_url = end($path_parts); $wisex = str_replace('-', ' ', $baslik_url); // Küçük harfe çevir ve sorguyu güncelle $sorgu = $baglanti->prepare("SELECT * FROM sarkilar WHERE LOWER(baslik) LIKE LOWER(?)"); $sorgu->execute(["%$wisex%"]); $sonuc = $sorgu->fetch(); // sorgu çalıştırılıp veriler alınıyor ?> - 24-07-2024, 20:30:10Kimlik doğrulama veya yönetimden onay bekliyor.Selamlar.wisex adlı üyeden alıntı: mesajı görüntüle
Veritabanı karakter türü nedir?
Aci ile Acı aynı şey değildir, aşağıdaki konu denermisiniz?
<?php include('config.php'); $request_uri = $_SERVER['REQUEST_URI']; $path = parse_url($request_uri, PHP_URL_PATH); $path = str_replace('-sarki-sozleri', '', $path); $path_parts = explode('/', trim($path, '/')); $baslik_url = end($path_parts); $wisex = ucwords(str_replace('-', ' ', $baslik_url)); // Türkçe karakter dönüşümü $search_term = str_replace( ['ı', 'ğ', 'ü', 'ş', 'ö', 'ç', 'İ', 'Ğ', 'Ü', 'Ş', 'Ö', 'Ç'], ['i', 'g', 'u', 's', 'o', 'c', 'I', 'G', 'U', 'S', 'O', 'C'], $wisex ); // LIKE sorgusunu daha esnek hale getirme $sorgu = $baglanti->prepare("SELECT * FROM sarkilar WHERE REPLACE(REPLACE(LOWER(baslik), 'ı', 'i'), '-', ' ') LIKE :search_term"); $sorgu->execute(['search_term' => '%' . strtolower($search_term) . '%']); $sonuc = $sorgu->fetch(); if ($sonuc) { print_r($sonuc); } else { echo "Sonuç bulunamadı."; } ?> - 24-07-2024, 20:33:14yigitmalik46 adlı üyeden alıntı: mesajı görüntülemaalesef iki kodda çalışmadıSinyor_Ridak adlı üyeden alıntı: mesajı görüntüle
config.php içeriğim
<?php $host = 'localhost'; $dbname = '......'; $username = '........'; $password = '......,'; $charset = 'utf8'; //$collate = 'utf8_unicode_ci'; $dsn = "mysql:host=$host;dbname=$dbname;charset=$charset"; $options = [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_PERSISTENT => false, PDO::ATTR_EMULATE_PREPARES => false, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, // PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES $charset COLLATE $collate" ]; try { $baglanti = new PDO($dsn, $username, $password, $options); $baglanti->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch (PDOException $e) { echo 'Bağlantı hatası: ' . $e->getMessage(); exit; } ?> - 24-07-2024, 20:35:14Kodda herhangi bir problem görünmüyor.wisex adlı üyeden alıntı: mesajı görüntüle
<?php include('config.php'); // Debug fonksiyonu function debug($data) { echo "<pre>"; print_r($data); echo "</pre>"; } $request_uri = $_SERVER['REQUEST_URI']; $path = parse_url($request_uri, PHP_URL_PATH); $path = str_replace('-sarki-sozleri', '', $path); $path_parts = explode('/', trim($path, '/')); $baslik_url = end($path_parts); $wisex = ucwords(str_replace('-', ' ', $baslik_url)); // Debug: Gelen değeri kontrol et debug("Aranan değer: " . $wisex); // Türkçe karakter dönüşümü function replaceTurkishChars($str) { $str = str_replace( ['ı', 'ğ', 'ü', 'ş', 'ö', 'ç', 'İ', 'Ğ', 'Ü', 'Ş', 'Ö', 'Ç'], ['i', 'g', 'u', 's', 'o', 'c', 'I', 'G', 'U', 'S', 'O', 'C'], $str ); return $str; } $search_term = replaceTurkishChars($wisex); // Debug: Dönüştürülmüş değeri kontrol et debug("Dönüştürülmüş değer: " . $search_term); // LIKE sorgusunu daha esnek hale getirme $sql = "SELECT * FROM sarkilar WHERE REPLACE(REPLACE(LOWER(baslik), 'ı', 'i'), '-', ' ') LIKE :search_term"; $sorgu = $baglanti->prepare($sql); $sorgu->execute(['search_term' => '%' . strtolower($search_term) . '%']); // Debug: SQL sorgusunu ve parametreleri kontrol et debug("SQL Sorgusu: " . $sql); debug("Arama terimi: %" . strtolower($search_term) . "%"); $sonuc = $sorgu->fetchAll(); // Debug: Sonuçları kontrol et if ($sonuc) { debug("Bulunan sonuçlar:"); debug($sonuc); } else { echo "Sonuç bulunamadı."; // Tüm şarkıları listele $allSongs = $baglanti->query("SELECT baslik FROM sarkilar LIMIT 10")->fetchAll(PDO::FETCH_COLUMN); debug("Veritabanındaki ilk 10 şarkı:"); debug($allSongs); } // Karakter seti kontrolü $charsetQuery = $baglanti->query("SHOW VARIABLES LIKE 'character_set%'")->fetchAll(PDO::FETCH_KEY_PAIR); debug("Veritabanı karakter seti ayarları:"); debug($charsetQuery); ?>Çıkan sonucu paylaşırmısınız, telegram varsa ordan da görüşebiliriz. - 24-07-2024, 20:37:08Sinyor_Ridak adlı üyeden alıntı: mesajı görüntüle
<pre>Aranan değer: Hande Yener Aci Veriyor</pre><pre>Dönüştürülmüş değer: Hande Yener Aci Veriyor</pre><pre>SQL Sorgusu: SELECT * FROM sarkilar WHERE REPLACE(REPLACE(LOWER(baslik), 'ı', 'i'), '-', ' ') LIKE :search_term</pre><pre>Arama terimi: %hande yener aci veriyor%</pre>Sonuç bulunamadı.<pre>Veritabanındaki ilk 10 şarkı:</pre><pre>Array ( [0] => Sagopa Kajmer - 366.Gün [1] => Hande Yener - Acı Veriyor ) </pre><pre>Veritabanı karakter seti ayarları:</pre><pre>Array ( [character_set_client] => utf8mb3 [character_set_connection] => utf8mb3 [character_set_database] => utf8mb4 [character_set_filesystem] => binary [character_set_results] => utf8mb3 [character_set_server] => utf8mb4 [character_set_system] => utf8mb3 [character_sets_dir] => /usr/share/mysql-8.0/charsets/ ) </pre> - 24-07-2024, 20:38:10config.php
<?php
$host = 'localhost';
$dbname = 'your_database_name'; // Veritabanı adınızı buraya yazın
$username = 'your_username'; // Kullanıcı adınızı buraya yazın
$password = 'your_password'; // Şifrenizi buraya yazın
$charset = 'utf8';
$collate = 'utf8_unicode_ci'; // Collation ayarını ekleyebilirsiniz
$dsn = "mysql:host=$host;dbname=$dbname;charset=$charset" ;
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_PERSISTENT => false,
PDO::ATTR_EMULATE_PREPARES => false,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES $charset COLLATE $collate"
];
try {
$baglanti = new PDO($dsn, $username, $password, $options);
$baglanti->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
echo 'Bağlantı hatası: ' . $e->getMessage();
exit;
}
———————————————-
PHP sayfası
<?php
include('config.php');
$request_uri = $_SERVER['REQUEST_URI'];
$path = parse_url($request_uri, PHP_URL_PATH);
$path = str_replace('-sarki-sozleri', '', $path);
$path_parts = explode('/', trim($path, '/'));
$baslik_url = end($path_parts);
$wisex = str_replace('-', ' ', $baslik_url);
$sorgu = $baglanti->prepare("SELECT * FROM sarkilar WHERE LOWER(baslik) LIKE LOWER(?)");
$sorgu->execute(["%$wisex%"]);
$sonuc = $sorgu->fetch();
if ($sonuc) {
// Sonuç varsa işle
print_r($sonuc);
} else {
echo "Sonuç bulunamadı.";
}
?>