Autor Zpráva
norick
Profil
Ahoj, mám problém s vyhledáním v tabulce podle zadaného řetězce:

$domena = trim(strtolower(str_replace("\\","",$radek[6]))); //$radek[6] obsahuje \\nb-muj, po tomto příkazu obsahuje $domena=nb-muj

@$sql_company = mysql_query("SELECT * FROM company WHERE domain LIKE '$domena'") or die ("Chyba aplikace - nepodarilo se nacist firmy (".mysql_error().")");

pocet výsledků 0

@$sql_company = mysql_query("SELECT * FROM company WHERE domain LIKE 'nb-muj'") or die ("Chyba aplikace - nepodarilo se nacist firmy (".mysql_error().")");

pocet vysledku 1

Díky M.
Kajman
Profil
Vypište si pro jistotu celý sestavený dotaz. Někde se budou asi lišit.
norick
Profil
Tak se neliší, je to úplně triviální dotaz do sql, tak nechápu, kde by mohl být problém

SELECT * FROM company WHERE domain LIKE 'nb-muj'
Keeehi
Profil
$domena = trim(strtolower(str_replace("\\","",$radek[6]))); //$radek[6] obsahuje \\nb-muj, po tomto příkazu obsahuje $domena=nb-muj

$dotaz = "SELECT * FROM company WHERE domain LIKE '$domena'";
$sql_company = mysql_query($dotaz) or die ("Chyba aplikace - nepodarilo se nacist firmy (".mysql_error().")");
echo $dotaz ."# výsledků: ".mysql_num_rows($sql_company)."<br>";

$dotaz = "SELECT * FROM company WHERE domain LIKE 'nb-muj'";
$sql_company = mysql_query($dotaz) or die ("Chyba aplikace - nepodarilo se nacist firmy (".mysql_error().")");
echo $dotaz ."# výsledků: ".mysql_num_rows($sql_company)."<br>";

Pokud i toto nebude konzistentní, tak jediné co mě napadá je to, že ta pomlčka v $domena není pomlčka ale nějaký jiný znak který jako pomlčka vypadá např. spojovník.
norick
Profil
Zkoušel jsem i tento zápis a ta pomlčka mě taky napadla, ale i bez pomlčky je to bez změny :-(

SELECT * FROM company WHERE domain LIKE 'nb'# výsledků: 0

jesli mu nějak vadí ten převod řetězce trim(strtolower(str_replace("\\","",$radek[6]))); už opravdu netuším.


SELECT * FROM company WHERE domain LIKE 'nb'# výsledků: 1


pokud to napíšu rovnou, tak se záznam najde


nevím jestli to pomůže, ten $radek[6] je naimportovaná hodnota z txt souboru

$data = "./import/mynb_login.txt";
  $str = file_get_contents($data);
  $lines = explode("\n", $str);
  echo "pocet r ".Count($lines)."<br />";
  for ($i = 2; $i < Count ($lines); $i++){
  $radek = explode(",", $lines[$i]);
  for($z = 0; $z < Count ($radek); $z++){$radek[$z] = str_replace("\"","",$radek[$z])." ";
  }
Keeehi
Profil
norick:
Nakopírujte sem, co se vypíše při spuštění scriptu z [#4].
norick
Profil
SELECT * FROM company WHERE domain LIKE 'nb'# výsledků: 0
SELECT * FROM company WHERE domain LIKE 'nb'# výsledků: 1
Keeehi
Profil
Pominu-li fakt, že toto nemůže být výstup z [#4] tak je to opravdu divné.

A toto dopadne jak?
$dotaz = "SELECT * FROM company WHERE domain LIKE '$domena'";
for($i=0;$i<strlen($dotaz);$i++)
  echo ord($dotaz[$i]).",";
echo "<br>";

$dotaz = "SELECT * FROM company WHERE domain LIKE 'nb-muj'";
for($i=0;$i<strlen($dotaz);$i++)
  echo ord($dotaz[$i]).",";
echo "<br>";
norick
Profil
83,69,76,69,67,84,32,42,32,70,82,79,77,32,99,111,109,112,97,110,121,32,87,72,69,82,69,32,100,111,109,97,105,110,32,76,73,75,69,32,39,110,0,98,39,
83,69,76,69,67,84,32,42,32,70,82,79,77,32,99,111,109,112,97,110,121,32,87,72,69,82,69,32,100,111,109,97,105,110,32,76,73,75,69,32,39,110,98,39,


pouze měním 'nb-muj' za 'nb' - jinak by to měl být ten výstup
Keeehi
Profil
Takže je to jasné. Mezi písmenky n a b je ještě znak 0. Mělo by to být vidět na tomto příkladě:
echo strlen($domena)."<br>";
echo strlen("nb");
čísla by se neměla rovnat
Kajman
Profil
norick:

Všimněte si, že na konci proměnné máte řídící znak 0, ten zlobí.

Záhadou zůstává, proč přežije po použití funkce trim.
Keeehi
Profil
Kajman:
Záhadou zůstává, proč přežije po použití funkce trim.
Protože je uvnitř textu a ne na konci.
norick
Profil
ano, máte pravdu, mezi každý znak vloží nějakou mezeru, když importuji delší slovo, tak to vloží mezi každý znak. No budu pátrat a uvidím. Každopádně děkuji moc za radu a nasměrování :-)

M.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: