2010-03-04 23 views
0

相當新的PHP,所以很抱歉,如果這看起來很愚蠢。我真的是從我公司的其他開發人員以前編寫的代碼中複製了很多這樣的代碼。如何防止查詢類在我的文本字符串中處理問號?

我們運行一個查詢的方式基本上是這樣的:

$qry = new SQLQuery; 
$sqlString = "SELECT * FROM database.table WHERE table.text = '" . 
       $textVar . "' and table.text2 = '" . $text2Var."'"; 
$qry->prepare(String::Condense($sqlString)); 
$qry->execute(); 

我遇到的問題是,$textVar$text2Var可以合法擁有問號在他們作爲其文本的一部分,這(?)正在導致查詢SQLQuery類中斷問題標記作爲我沒有通過它的變量。

那麼如何指示SQLQuery類忽略問號?

p.s.我確信有很多我不知道的術語,請給我一個答案時記住這一點。

+0

什麼類的SQLQuery您使用的是?它不是內置的。 – Kris 2010-03-04 22:31:32

+0

@Kris - 我不知道,在這份工作之前我從未使用過PHP,我只是複製了我在產品中其他地方看到的代碼。我不知道SQLQuery不是主要的php庫的一部分 – invertedSpear 2010-03-04 22:36:37

回答

2

你希望你的準備好的語句$sqlString?你把$textVar$text2var,然後你需要綁定那些語句。

它將它們視爲佔位符,因爲在準備SQL時看起來像佔位符

所以:

$sqlString = "SELECT * FROM database.table WHERE table.text = ? and table.text2 = ?" 

你應該看看MySQL Prepared Statements,並與他們的工作,他們提供什麼樣的好處熟悉。

+0

所以我們可以說我把它切換成看起來像 'WHERE table.text ='?'和table.text2 ='?'「;'然後我給變量提供它,即使變量有'?'作爲它們文本的一部分,它會好嗎?如果我的'$ sqlString'準備好了,我必須做好準備嗎?如果是這樣,我該如何執行查詢而不做準備? – invertedSpear 2010-03-04 22:33:49

+0

@invertedSpear:我不知道你使用的是哪個數據庫封裝,所以很難回答,但是你希望**使用準備好的查詢,儘管如此你不必擔心會消毒所有東西,是的,你的價值觀可以在它們裏面,沒有問題 – jasonbar 2010-03-04 22:36:11

+0

希望我知道更多關於PHP的知識,所以我可以提出一個更好的問題。完成準備/參數化的陳述。感謝您的幫助 – invertedSpear 2010-03-04 22:43:19

0

它還挺看起來有些PDO衍生所以也許應該更多的東西一樣:

$qry = new SQLQuery; 
$sqlString = 'SELECT * FROM database.table WHERE table.text=? AND table.text2=?' 
$qry->prepare($sqlString); 
$qry->execute(array($textVar, $text2Var)); 
相關問題