2014-11-03 51 views
1

我從mysql切換到pdo。我有以下代碼:Php PDO mysql給不同的結果比mysql workbentch

$stmt_serverl = $db->prepare("SELECT ID, Name, IP, IP2 FROM serverl WHERE LOWER(Name) LIKE '%:name%'"); 

if ($row['divs'] == 1) { 
    $date_compare = new DateTime('2014-10-15 11:11:10'); 
    if ($dt > $date_compare) { 
     $name = explode('@',strtolower($row['name'])); 
     print_r($name); 
     $full_name = $name[0]."-".$name[1].$name[2]; 
     $stmt_serverl->bindValue(':name', $name[1], PDO::PARAM_STR); 
     } 
    else { 
     $name = explode('@',strtolower($row['name'])); 
     print_r($name); 
     $full_name = $name[0]."-".$name[1]."-".$name[2]; 
     $stmt_serverl->bindValue(':name', $name[1], PDO::PARAM_STR); 
     } 
    } 
elseif ($row['divs'] == 2) { 
    $name = explode('@',strtolower($row['name'])); 
    print_r($name); 
    $full_name = $name[0].$name[1]."-".$name[2]; 
    $stmt_serverl->bindValue(':name', $name[0], PDO::PARAM_STR); 
    } 
$dt = null; 

$stmt_serverl->execute(); 
$result = null; 
$result = $stmt_serverl->fetchAll(); 

// println($query_serverl, $debug, $logfile); 
echo "<pre>"; 
print_r($result); 
echo "</pre>"; 

我從另一個結果集,它工作得很好,所有PARAMS($行[「的div」]和$行[「名稱」])。 當我運行與$名VAR查詢我得到了奇怪的結果:

陣列 ( [0] =>陣列 ( [ID] => 3237 [名] =>:名稱 [IP] =>:IP [IP2] =>:IP2 )

[1] => Array 
    (
     [ID] => 3236 
     [Name] => :Name 
     [IP] => :IP 
     [IP2] => :IP2 
    ) 

[2] => Array 
    (
     [ID] => 3235 
     [Name] => :Name 
     [IP] => :IP 
     [IP2] => :IP2 
    ) 

[3] => Array 
    (
     [ID] => 3234 
     [Name] => :Name 
     [IP] => :IP 
     [IP2] => :IP2 
    ) 

) ,同時運行在工作臺返回0的結果相同的查詢(無匹配在所有) 我無法確定可能是什麼問題。 謝謝 mor

+0

您的if/else/elseif什麼也不做。 – 2014-11-03 12:03:40

+0

好的,我認爲你是對的,但我不明白我是如何從printif4($ name)的elseif內輸出的...... – 2014-11-03 12:24:21

回答

0

不要引用佔位符,數據庫將接收%:name%作爲值。

更改SQL這樣的:

SELECT ID, Name, IP, IP2 FROM serverl WHERE LOWER(Name) LIKE :name 

比調整綁定:

$stmt_serverl->bindValue(':name', '%'.$name[1].'%', PDO::PARAM_STR); 

或者你還可以在SQL本身concactenation:

SELECT ID, Name, IP, IP2 FROM serverl WHERE LOWER(Name) LIKE CONCAT ('%', :name , '%') 

然後綁定與您目前綁定的方式相同:

$stmt_serverl->bindValue(':name', $name[1], PDO::PARAM_STR); 
+0

謝謝,它現在正在工作。我改變了如果到$行['divs'] ==「2」',並修正了前面提到的SQL查詢。 – 2014-11-04 06:02:47

+0

不客氣! – meda 2014-11-04 06:04:45