2013-06-25 4 views
0

У меня есть код, который еще не работает, прежде чем отлаживать. Я хочу убедиться, что этот синтаксис или метод действительно могут работать и фактически только выполнить mysql_query, если последнее условие истинно.PHP - этот синтаксис возможен и безопасен.

Кроме того, разве это относительно безопасная практика? Я не мог найти что-либо, связанное с этим, я подумал, что кто-то поместил его на английском, это поможет мне разобраться.

if($var1 == $var2) {$new = 1;} 
if($vara == $varb) {$old = 1;} 
if($new = 1 && $old = 1) { mysqli_query($somequery);} 
+3

Вам нужно дважды проверить, что делает оператор if в этой последней строке. – andrewsi

+3

'if ($ new = 1 && $ old = 1) 'похоже на плохую идею.' if ($ new == 1 && $ old == 1) 'вместо? – OcuS

+0

это сработает, и все будет хорошо, но вы можете объединить его в единственное 'if (($ va r1 == $ var2) && ($ vara == $ varb)) {// do query' – Dave

ответ

8

Это не сработает из-за единственного =.

Перейти к:

if($var1 == $var2) {$new = 1;} 
if($vara == $varb) {$old = 1;} 
if($new == 1 && $old == 1) { mysqli_query($somequery);} 

Или, в идеале:

if ($var1 == $var2 && $vara == $varb) { 
    mysqli_query($somequery); 
} 

Лучшие намек, чтобы остановить такие вещи, как if ($var = 1) опечаток - переключают сравнения вокруг и поставить постоянный первый.

Если вы пишете if ($var = 1) тогда $ вар становится 1 и всегда верно, но если вы пишете if (1 = $var) вы получите сообщение об ошибке, что это именно то, что вы хотите (и то же самое произойдет, если использовать строку if ("yes" = $var).

Это было забито в нас, чтобы перенести переменную с самого начала навсегда, но вам гораздо лучше делать это наоборот.

+1

Ну, это ** будет ** работать, поскольку 1 == true, но проблема в том, что это будет ** всегда ** работать – casraf

+1

@ChenAsraf нет, нет смысла делать 'if' с помощью оператора присваивания. 'If' нужно сравнить вещи и не назначать. –

+1

@ ØHankyPankyØ Я знаю, я не согласился на это. Только упоминал, что if будет работать, поскольку присвоение 1 вернет true. – casraf