2016-11-11 8 views
2

私はこの問題があります。PHP変数は文字列のように扱われます

私は、mysqlデータベース内のコメント欄から、このような文字列を受信する必要があります。

WHERE IDTable=$number 

私はこのコメントを取得すると私は私のクエリでWhere句のようにそれを配置する必要があります。

しかし、私は、このコード

$where=getComment($table,$field); //I get the string i wrote above 
$number=5; //I initialize $number in my code 
$sql="SELECT * FROM table $where"; 
print "SQL: $sql"; 

を書く場合、私はこの取得:

SELECT * FROM table WHERE IDTable=$number 

明らかに私が応答を持っているしたいと思います:

SELECT * FROM table WHERE IDTable=5 

は、私はそれをどのように行うことができますが?

おかげ

+0

getComment関数は表示されませんが、使用する前に番号を定義する必要があります.2)スコープ内に存在しない可能性があります.3)(これは推測です)二重引用符の代わりに一重引用符を使用してWHERE文字列を作成します。 – aynber

答えて

0

上記のあなたが述べた結果を生成しないと、私は強くコードはあなたが問題を抱えている容疑者は、上記と同じコードではありません。少なくとも、あなたが呼び出している関数の定義が不足しているため、出力を作成できません。

しかし、このような結果を生み出すのは、文字列を一重引用符で囲むことです。 which prevents variable expansion、そしてそれらを通常の文字列として扱います。

だけでなく、あなたのコードも順不同です。変数が宣言される前に使用することはできません。なぜなら、変数はまだ存在しないからです。

0

getComment()が返す文字列は解析されないため、その中のPHP変数($number)がリテラル文字列として返されます。

私は2つのオプションを考えることができます - あなたはgetComment()から$numberを返さないでください$number

$number=5; 
$where = getComment($table,$field,$number); // returns "WHERE IDTable=5" 
$sql="SELECT * FROM table $where"; 


それを渡すことができgetComment()のための追加のパラメータを許可


クエリを作成するときに追加することができます。

$where=getComment($table,$field); // returns "WHERE IDTable=" 
$number=5; 
$sql="SELECT * FROM table $where $number"; 
0

おそらく、あなたは、MySQLから得た文字列値:WHERE IDTable=$numberは単一引用符で囲まれている場合があります。以下の例を考えてみましょう。これはあなたの文字列の場合であると仮定すると、

$number    = 22; 
    $str    = 'WHERE IDTable=$number'; 
    var_dump($str);  //<== YIELDS:: 'WHERE IDTable=$number' B'COS IT'S IN SINGLE QUOTES 

    $parts    = explode("=", $str); 
    list($where, $var) = $parts; 
    $var    = ltrim(trim($var), "\$"); 
    $newStr    = trim($where . "=" . $$var); 

    var_dump($$var); //<== YIELDS:: int 22 
    var_dump($newStr); //<== YIELDS:: 'WHERE IDTable=22' (length=16) 

。これを回避するには、単に文字列から変数を抽出し、上のスニペットが示すように文字列を再構築することができます。さもないと;ダブルクォートで文字列を囲む可能性がある場合、この複雑な回避策はまったく無関係です。

関連する問題