что это за javascript, если стенография, которая использует только & amp; & amp; названный [дубликат]

Запрос может быть неудачным по различным причинам, и в этом случае оба mysql_ * и расширение mysqli вернут false из своих соответствующих функций / методов запроса. Вам нужно проверить это условие ошибки и обработать его соответствующим образом.

mysql_ * extension :

ПРИМЕЧАНИЕ Функции mysql_ устарели и были удалены в версии 7 php.

blockquote>

Перед передачей mysql_fetch_array проверьте $result. Вы обнаружите, что это false, потому что запрос завершился неудачно. См. Документацию mysql_query для возможных возвращаемых значений и предложений о том, как с ними обращаться.

$username = mysql_real_escape_string($_POST['username']);
$password = $_POST['password'];
$result = mysql_query("SELECT * FROM Users WHERE UserName LIKE '$username'");

if($result === FALSE) { 
    die(mysql_error()); // TODO: better error handling
}

while($row = mysql_fetch_array($result))
{
    echo $row['FirstName'];
}

расширение mysqli процедурный стиль :

$username = mysqli_real_escape_string($mysqli, $_POST['username']);
$result = mysqli_query($mysqli, "SELECT * FROM Users WHERE UserName LIKE '$username'");

// mysqli_query returns false if something went wrong with the query
if($result === FALSE) { 
    yourErrorHandler(mysqli_error($mysqli));
}
else {
    // as of php 5.4 mysqli_result implements Traversable, so you can use it with foreach
    foreach( $result as $row ) {
        ...

oo-style :

$username = $mysqli->escape_string($_POST['username']);
$result = $mysqli->query("SELECT * FROM Users WHERE UserName LIKE '$username'");

if($result === FALSE) { 
    yourErrorHandler($mysqli->error); // or $mysqli->error_list
}
else {
    // as of php 5.4 mysqli_result implements Traversable, so you can use it with foreach
    foreach( $result as $row ) {
      ...

с использованием подготовленного оператора:

$stmt = $mysqli->prepare('SELECT * FROM Users WHERE UserName LIKE ?');
if ( !$stmt ) {
    yourErrorHandler($mysqli->error); // or $mysqli->error_list
}
else if ( !$stmt->bind_param('s', $_POST['username']) ) {
    yourErrorHandler($stmt->error); // or $stmt->error_list
}
else if ( !$stmt->execute() ) {
    yourErrorHandler($stmt->error); // or $stmt->error_list
}
else {
    $result = $stmt->get_result();
    // as of php 5.4 mysqli_result implements Traversable, so you can use it with foreach
    foreach( $result as $row ) {
      ...

Эти примеры только иллюстрируют , что должно быть сделано (обработка ошибок), а не как это сделать. При выпуске HTML код производства не должен использовать or die , иначе он будет (по крайней мере) генерировать недопустимый HTML. Кроме того, сообщения об ошибках базы данных не должны отображаться для пользователей, не являющихся администраторами, так как раскрывает слишком много информации .

42
задан Bergi 22 October 2015 в 09:14
поделиться

6 ответов

В принципе, логический оператор И (&&) вернет значение второго операнда, если первый - правy , и он вернет значение первого операнда, если оно сам falsy , например:

true && "foo"; // "foo"
NaN && "anything"; // NaN
0 && "anything";   // 0

Обратите внимание, что значения falsy - это те, которые принуждают к false при использовании в булевом контексте, они null, undefined, 0, NaN, пустая строка и, конечно, false, что-то еще прилегает к true.

61
ответ дан CMS 25 August 2018 в 20:32
поделиться

Согласно Аннотированный раздел 11.11 ECMAScript 5.1 :

В случае логического оператора OR (||),

expr1 || expr2 Возвращает expr1, если он может быть преобразован в true; в противном случае возвращает expr2. Таким образом, при использовании с булевыми значениями || возвращает true, если оба операнда истинны; если оба значения false, возвращает false.

В данном примере

var oneOrTheOther = someOtherVar || «Это не дроиды, которые вы ищете ... двигаться вперед»;

Результатом будет значение someOtherVar, если логическое значение (someOtherVar) истинно. (См. Truthiness of выражение ). Если это неверно, результатом будет «это не дроиды, которые вы ищете ... двигаться вперед»;

И в случае логического оператора AND (& amp;),

Возвращает expr1, если его можно преобразовать в false; в противном случае возвращает expr2. Таким образом, при использовании с булевыми значениями & amp; & amp; возвращает true, если оба операнда истинны; в противном случае возвращает false.

В данном примере,

case 1: когда Boolean (someOtherVar) является false: он возвращает значение someOtherVar.

case 2: когда Boolean (someOtherVar) истинно: он возвращает «это не дроиды, которые вы ищете ... двигаться вперед».

1
ответ дан BatScream 25 August 2018 в 20:32
поделиться

Цитирование Douglas Crockford 1:

Оператор && создает значение своего первого операнда, если первый операнд является ложным. В противном случае он выдает значение второго операнда.


1 Дуглас Крокфорд: JavaScript: Хорошие детали - Страница 16

18
ответ дан Daniel Vassallo 25 August 2018 в 20:32
поделиться

Я видел & amp; & amp; чрезмерное использование здесь при работе для операторов присваивания. Конкуренция двоякая: 1) Проверка индикатора иногда является функцией с накладными расходами, которые разработчики не учитывают. 2) Разработчики просто видят в нем проверку безопасности и не считают, что они присваивают ложные значения их var. Мне нравится, что у них есть тип безопасного типа, поэтому я их изменяю:

var currentIndex = App.instance && App.instance.rightSideView.getFocusItemIndex();

:

var currentIndex = App.instance && App.instance.rightSideView.getFocusItemIndex() || 0;

, поэтому они получают целое число, как ожидалось.

0
ответ дан Drew Deal 25 August 2018 в 20:32
поделиться

Пример для начинающих

Если вы пытаетесь получить доступ к «user.name», но тогда это происходит:

Uncaught TypeError: Cannot read property 'name' of undefined 

Не бойтесь. Вы можете решить это, используя & amp; & amp; оператор в задании или часто называемый сторожевым оператором, так как он «защищает» от неопределенной ошибки.

Вот несколько примеров, которые вы можете найти нечетными, но продолжайте читать, как объясняется позже.

var user = undefined;
var username = user && user.username;
// no error, "username" assigned value of "user" which is undefined

user = { username: 'Johnny' };
username = user && user.username;
// no error, "username" assigned 'Johnny'

user = { };
username = user && user.username;
// no error, "username" assigned value of "username" which is undefined

Объяснение: В режиме охраны каждый термин оценивается слева направо по одному. Если оцениваемое значение является ложным, оценка останавливается и это значение затем назначается. Если последний элемент достигнут, тогда ему присваивается, является ли он ложным.

ложь означает, что это любое из этих значений undefined, false, 0, null, NaN, '', а правда просто означает НЕ ложь.

Легкая кнопка для метода Guard

Используйте прекрасный защитный оператор lodash для доступа к вложенным данным следующим образом:

// need to access obj.has.some.very.nested.stuff
var val = _.get(obj, 'has.some.very.nested.stuff');

, поскольку он обрабатывает & amp; & amp; & amp; & amp; материал под капотом, будучи приятным в использовании удобным способом. Исходный код Lodash _.get

Бонус: Оператор OR

Другим полезным странным назначением, которое в практическом использовании, является оператор OR, который обычно используется для таких плагинов:

this.myWidget = this.myWidget || (function() {
   // define widget
})();

, который будет назначать только часть кода, если «this.myWidget» является ложным. Это удобно, потому что вы можете объявлять код в любом месте и несколько раз, не заботясь о том, был ли он назначен или нет ранее, зная, что он будет назначен только один раз, поскольку люди, использующие плагин, могут несколько раз объявлять ваш скриптовый тег src несколько раз.

Объяснение: Каждое значение оценивается слева направо, по одному за раз. Если значение является правдивым, оно прекращает оценку и присваивает это значение, в противном случае продолжает движение, если последний элемент достигнут, он присваивается независимо от того, является ли он ложным или нет.

Дополнительный кредит: Объединение и amp; & амп; и || в задании

Теперь у вас есть максимальная сила и вы можете делать очень странные вещи, такие как этот очень странный пример использования его в палиндроме.

function palindrome(s,i) {
 return (i >= s.length/2) || (s[i] === s[s.length -1 - i]) && palindrome(s, ++i);
}

Подробное объяснение здесь: Проверка палиндрома в Javascript

Счастливое кодирование.

11
ответ дан Jason Sebring 25 August 2018 в 20:32
поделиться

&& иногда называют оператором guard .

variable = indicator && value

его можно использовать, чтобы установить значение, только если индикатор правдоподобен.

19
ответ дан mykhal 25 August 2018 в 20:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: