2016-05-25 45 views
1

我有一個使用mysqli_*()函數(實際上,它使用mysql_*()函數.gah!)的舊版應用程序。我使用aura/sqlquery作爲SQL查詢生成器。例如:當使用mysqli_ *連接時,在aura/sqlquery中進行變量綁定

$sql = (string) $select; 

現在我想做的事情做一個where()一些變量綁定:

$queryFactory = new Aura\SqlQuery\QueryFactory('mysql'); 
$select = $queryFactory->newSelect(); 
$select->from('sometable AS t') 
    ->where('t.field1 = 0') 
    ->where("t.field2 <> ''"); 

然後我們通過轉換成字符串獲取原始的SQL

$select->where('t.somefield = ?', $somevalue); 

當我強制轉換爲字符串,轉義/綁定永遠不會發生。看來只有在使用PDO並準備好語句時纔會進行綁定。

任何想法如何在使用mysqli連接時獲得aura/sqlquery中的變量綁定?

+1

我想運行一個查詢功能一個查詢生成器是一個需求,你不需要一個與原始SQL一起工作的解決方案? –

+0

@YourCommonSense我更喜歡使用查詢生成器來處理複雜的連接。例如,如果一個User模型有幾個需要多個連接的方法,那麼很容易在單個輔助方法中執行這些常用連接,然後傳遞'$ select'對象。管理原始SQL文本對我來說感覺很麻煩。 –

+0

是的,我明白了。但仍然。您的要求不明白。你只需要得到一個原始的SQL,與mysql_函數一起使用,這是唯一的選擇? –

回答

0

您可以使用$select->getBindValues()來獲取綁定值。

我會說利用Aura.Sql比pdo它可以幫助你在某些其他情況下,如IN()查詢。

以自述文件爲例。

// a PDO connection 
$pdo = new PDO(...); 

// prepare the statment 
$sth = $pdo->prepare($select->getStatement()); 

// bind the values and execute 
$sth->execute($select->getBindValues()); 

如果您需要更多相同的說明,請告知我們。

謝謝。

+0

感謝您的快速響應。我知道我可以將這些綁定值用於PDO。問題是如何生成可以用於mysql或mysqli的原始SQL。 –

+1

有沒有其他方式我知道:(。 –

1

如果你的PHP版本> = 5.6,這裏要說的是,你可以用它來從光環/ sqlquery的反對的mysqli

function mysqli_query_params($mysqli, $query, $params, $types = NULL) 
{ 
    $statement = $mysqli->prepare($select); 
    $types = $types ?: str_repeat('s', count($params)); 
    $statement->bind_param($types, ...$params); 
    $statement->execute(); 
    return $statement; 
} 

像這樣使用

mysqli_query_params($mysqli, $select->getStatement(), $select->getBindValues()) 
+1

我認爲'大衛Weinraub'這是你可能需要的答案你正在尋找使用mysqli連接,而不是pdo。 –