- mysql — PHP SQL внутреннее соединение bool (false)
- Решение
- Другие решения
- Запрос, который должен посчитать количество записей в БД возвращает bool(false)
- How to deal with ‘Boolean’ values in PHP & MySQL?
- mysqli_query возвращает bool (false) все время
- Решение
- Другие решения
- Почему это возвращает bool (false)?
- 2 ответы
mysql — PHP SQL внутреннее соединение bool (false)
Я пытаюсь получить «общий вес» для предметов, которые несет персонаж. Я делаю это, выбирая количество элементов в таблице символов и сравнивая вес, заданный в таблице элементов, и к ним присоединяется столбец iid (идентификатор элемента)
Я пробовал много разных методов, но безрезультатно, поэтому я искал заявления о присоединении. У меня есть проблема, почему $ result возвращает bool (false), а затем, как я могу получить веса, чтобы сложить потом.
Вот код, с которым я сейчас работаю:
$sql = "SELECT * FROM `characteritem` WHERE `owner` = '$user' INNER JOIN item ON characteritem.iid=item.iid"; $result = $db_conn->query($sql); if ($result->num_rows > 0) < // output data of each row while ($row = $result->fetch_assoc()) < $iid = $row['characteritem.iid']; $quantity = $row['characteritem.quantity']; $itemweight = $row['item.itemweight']; $itemtotal = $itemweight + $itemweight; echo $itemtotal; >> var_dump($result);
SQL сейчас работает нормально. Я получил вес и количество и получил индивидуальные результаты. Как бы получить значения, чтобы сложить вместе для $ itemtotal?
$sql = "SELECT * FROM `characteritem` INNER JOIN item ON characteritem.iid=item.iid WHERE `owner` = '$user'"; $result = $db_conn->query($sql); if ($result->num_rows > 0) < while ($row = $result->fetch_assoc()) < $iid = $row['characteritem.iid']; $quantity = $row['quantity']; $itemweight = $row['itemweight']; $itemtotal = $itemweight * $quantity; echo $itemtotal; >>
Решение
Your SQL sintax is wrong, try $sql = "SELECT * FROM `characteritem` INNER JOIN item ON characteritem.iid=item.iid WHERE `owner` = '$user'";
Другие решения
$sql = "SELECT * FROM `characteritem` INNER JOIN item ON characteritem.iid=item.iid" WHERE `owner` = '$user'; $result = $db_conn->query($sql); if ($result->num_rows > 0) < // output data of each row while ($row = $result->fetch_assoc()) < $iid = $row['characteritem.iid']; $quantity = $row['characteritem.quantity']; $itemweight = $row['item.itemweight']; $itemtotal = $itemweight + $itemweight; echo $itemtotal; >> var_dump($result);
Запрос, который должен посчитать количество записей в БД возвращает bool(false)
CopyFile возвращает false, хотя не должен
Здравствуйте. В коде ниже CopyFile возвращает false: procedure TMainForm.N22Click(Sender.
Запрос возврощяет bool(false)
У меня есть столбец с такими данными: <1>bar bar foo</1> запрос на phpmyadmin: select.
GetSession(false) должен был вернуть null, а он возвращает сессию
Зравствуйте. Платформа java ee 6, сервер tomcat6. В сервлете прописано: session =.
Запрос возвращает false
Доброго времени суток. У меня проблема. Хочу чтобы функция возвращала количество новостей из базы.
$query=mysql_query('SELECT COUNT(*) FROM `table` WHERE `login`="' . $login . '" AND `password`="' . $pass . '"');
Сообщение от KOPOJI
$query=mysql_query('SELECT COUNT(*) FROM `table` WHERE `login`="' . $login . '" AND `password`="' . $pass . '"');
Да это знаю. Забыл поправить
Добавлено через 27 секунд
Почему возвращает такое значение не пойму)
а какое оно должно вернуть, если там ошибка синтаксиса?
Возвращаемые значения
Для запросов SELECT, SHOW, DESCRIBE, EXPLAIN и других запросов, возвращающих результат из нескольких рядов, mysql_query() возвращает дескриптор результата запроса (resource), или FALSE в случае ошибки.
Для других типов SQL-запросов, INSERT, UPDATE, DELETE, DROP и других, mysql_query() возвращает TRUE в случае успеха и FALSE в случае ошибки.
Полученный дескриптор результата нужно передать в функцию mysql_fetch_assoc() или любую другую функцию, работающую с результатами запросов.
Используйте mysql_num_rows() для выяснения количества рядов в результате SELECT-запроса или mysql_affected_rows() для выяснения количества обработанных рядов запросами DELETE, INSERT, REPLACE и UPDATE.
mysql_query() также завершится с ошибкой и вернет FALSE, если у пользователя нет доступа к какой-либо из таблиц, фигурирующих в запросе.
How to deal with ‘Boolean’ values in PHP & MySQL?
We are using MySQL version 8.0.12. Let us first check the MySQL version:
mysql> select version(); +-----------+ | version() | +-----------+ | 8.0.12 | +-----------+ 1 row in set (0.00 sec)
To deal with Boolean in MySQL, you can use BOOL or BOOLEAN or TINYINT(1). If you use BOOL or BOOLEAN, then MySQL internally converts it into TINYINT(1).
In BOOL or BOOLEAN data type, if you use true literal then MySQL represents it as 1 and false literal as 0 like in PHP/ C/ C++ language.
To proof that MySQL convert the BOOL or BOOLEAN to TINYINT(1), let us create a table with BOOLEAN or BOOL column.
Here, we are creating a table with column BOOLEAN. The query to create a table is as follows:
mysql> create table BoolOrBooleanOrTinyintDemo -> ( -> Id int NOT NULL AUTO_INCREMENT, -> isvalidAddress BOOLEAN, -> PRIMARY KEY(Id) -> ); Query OK, 0 rows affected (0.74 sec)
Now check the DDL of the above table using SHOW CREATE command. The query is as follows:
mysql> show create table BoolOrBooleanOrTinyintDemo\G
The following is the output:
*************************** 1. row *************************** Table: BoolOrBooleanOrTinyintDemo Create Table: CREATE TABLE `boolorbooleanortinyintdemo` ( `Id` int(11) NOT NULL AUTO_INCREMENT, `isvalidAddress` tinyint(1) DEFAULT NULL, PRIMARY KEY (`Id`) ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci 1 row in set (0.00 sec)
Look at the column isvalidAddress, the datatype BOOLEAN is converted into tinyint(1) internally. Now you can check the true literal will be represented by 1 and false literal by 0. Insert some records in the table with true and false literal values. The query to insert record is as follows:
mysql> insert into BoolOrBooleanOrTinyintDemo(isvalidAddress) values(true); Query OK, 1 row affected (0.43 sec) mysql> insert into BoolOrBooleanOrTinyintDemo(isvalidAddress) values(false); Query OK, 1 row affected (0.17 sec) mysql> insert into BoolOrBooleanOrTinyintDemo(isvalidAddress) values(true); Query OK, 1 row affected (0.29 sec) mysql> insert into BoolOrBooleanOrTinyintDemo(isvalidAddress) values(false); Query OK, 1 row affected (0.12 sec) mysql> insert into BoolOrBooleanOrTinyintDemo(isvalidAddress) values(true); Query OK, 1 row affected (0.33 sec)
Display all records from the table using select statement. The query to display all records is as follows:
mysql> select *from BoolOrBooleanOrTinyintDemo;
The following is the output:
+----+----------------+ | Id | isvalidAddress | +----+----------------+ | 1 | 1 | | 2 | 0 | | 3 | 1 | | 4 | 0 | | 5 | 1 | +----+----------------+ 5 rows in set (0.00 sec)
Look at the above sample output, true represents as 1 and false represents as 0.
In PHP, if you use true then it will be represented as 1 and false will be represented as 0.
Look at the following PHP code. Here, I have set the variable ‘isValidAddress’. The value is 1, that means it evaluates the if condition true and execute the body of if statement only. Check the following code:
$isValidAddress = 1; if($isValidAddress) < echo 'true is represented as '; echo ($isValidAddress); >else
Here is the snapshot of code:
The following is the output:
If you change the variable ‘isValidAddress’ to value 0. That means it evaluates the if condition false and execute the body of else statement only. The following is the code:
$isValidAddress=0; if($isValidAddress) < echo 'true is represented as '; echo ($isValidAddress); >else
Here is the snapshot of code:
The following is the output:
mysqli_query возвращает bool (false) все время
привет, я пытаюсь сделать простой запрос и функция «mysqli_query ($ this-> ind_connect, $ qry)» все время возвращает мне false
1. соединение возвращается «истина» 2. я пытаюсь изменить запрос на самый простой запрос, как «SELECT * из users_details и mysqli_query возвращает мне ложь снова.
Решение
У вас много проблем в этом, но вот что я бы попробовал:
public function verify_login($email, $password) < $conn = $this->Connect(); //Make sure $this->Connect(); returns the connection. (Where mysqli_connect(host,user,pass,dbname); is called) //Never inject variables into SQL without escaping the information first for SQL security reasons. $email = mysqli_real_escape_string($conn, $email); $password = mysqli_real_escape_string($conn, $password); $query = "`email`='$email' AND `password`='$password';"; $sql = "SELECT `email`, `password` FROM `users_details` WHERE $query"; if ($this->res=mysqli_query($this->ind_connect, $qry)) < $num_row = mysqli_num_rows($this->res); $row = mysqli_fetch_assoc($this->res); if ($num_row == 1) < echo 'true'; $_SESSION['email'] = $row['email']; $_SESSION['password'] = $row['password']; >> else < echo 'errr'; >$this->Disconnect(); >
Я заметил, что в одной из ваших строк SQL вы использовали одинарные кавычки « вместо правильных » при проверке по электронной почте и паролю. Имя должно быть внутри «, а значение всегда должно быть внутри », если не имеет дело с другим типом данных.
Я настоятельно рекомендую исправить проблему безопасности, так как возможна инъекция SQL.
Я бы порекомендовал вам перейти на что-то более современное и безопасное, например, PDO для подключения к базе данных.
Другие решения
Почему это возвращает bool (false)?
Я совершенно ошибаюсь, думая, что, поскольку эти числа отличны от нуля, они должны возвращать истину?
Почему люди делают такие вещи, как (condition) ? true : false ? Ваш condition уже является логическим значением, в этом нет смысла, кроме как сбить с толку других людей, смотрящих на ваш код. А если серьезно, не используйте mysql_* функции, они устарели. Использовать mysqli_* или ПДО. — NullUserException
Я отредактировал код, так как результата там быть не должно. Я очень новичок в этом, и этот запрос основан на других запросах, которые я сделал или мне показали, как это сделать. — Colbyd
Что касается PDO, мне нужно переключить соединение с базой данных на PDO, чтобы начать использовать запросы PDO? — Colbyd
@Colbyd Да, когда вы создаете новый объект PDO, он устанавливает новое соединение. Прочтите документацию здесь: php.net/manual/en/class.pdo.php — NullUserException
@NullUserException Я планировал переключить весь мой mysql на PDO, но подумал, что мне нужно будет начать с моего файла connect.php и изменить его на PDO, прежде чем использовать любой из моих запросов PDO. — Colbyd
2 ответы
Чтобы ответить на ваш вопрос:
mysql_result Возвращает FALSE по ошибке. Вы передаете массив из mysql_fetch_assoc вместо ресурса mysql, как того требует mysql_result сигнатура функции:
string mysql_result ( resource $result , int $row [, mixed $field = 0 ] )
Таким образом, он возвращается FALSE потому что у него ошибка.
// Change $movement_performed = mysql_fetch_assoc($query); $return = result(mysql_result($movement_performed, 0) == 1) ? true : false; // to $movement_performed = mysql_fetch_row($query); return $movement_performed[0] > 0;
Это захватывает результат оператора count и выполняет > 0 Проверь это. > 0 check на самом деле не нужен, но помогает показать намерение, а не полагаться на истинные значения.
Боковое примечание: mysql_* функции устарели. Вы должны перенести свой код для использования MySQLi or PDO . Вы, к сожалению, пользуетесь тем, что многие mysql_* функции не нуждаются в mysql ресурс. Миграция вашего кода будет мучительной, потому что вам придется изменить кучу функций или объявить глобальные переменные. Я рекомендую первый вариант, но для его исправления потребуется много усилий.
@LeviMorrison спасибо за помощь, которая сработала. Я разместил цикл php выше, где я вызываю эту функцию и что я пытаюсь выполнить. Можете ли вы взглянуть и сказать мне, что я делаю неправильно, вызывая эту функцию? — Колбид
Теперь, когда я делаю var_dump ($return) это получить bool(true) bool(true) что правильно, так как movement существует от этого пользователя в этом классе в этот день. Когда я делаю var_dump (isPerformed) из цикла while он возвращает NULL и, следовательно, выполняет функцию, которую я не хочу делать, если возвращает true. — Колбид
можете ли вы сказать мне, что делает эта строка $return = $movement_performed[0] > 0; — Колбид
@Colbyd Ты действительно сказал return $return; в вашей функции? Вы должны вернуть результат из функции. Я отредактировал свой пример кода, чтобы отразить это. — Леви Моррисон
мой код в настоящее время выглядит так $return = $movement_performed[0] > 0; — Колбид
(count(mysql_fetch_assoc ) >0 ) ? true : false;
result(mysql_result($movement_performed, 0) == 1) ? true : false;