Вопрос:
Я новичок в веб-программировании, но знаю немного. Я делаю частную систему обмена сообщениями, но получаю сообщение об ошибке:
Catchable fatal error: Object of class mysqli_result could not be converted to string in C:xampphtdocsmessagesend.php on line 26
Это код:
$check_conv=mysqli_query($con,»SELECT ‘hash’ FROM ‘message_g’ WHERE (‘user_one’=’$my_id’ AND ‘user_two’=’$user’) OR (‘user_one’=’$user’ AND ‘user_two’=’$my_id’)»);
Что я делаю неправильно, я проверил и в базе данных есть значения. Также я проверил, и я использую mysqli все вокруг и не смешиваю mysql и mysqli. Любая помощь будет принята с благодарностью. Благодарю.
Изменение: Полный код ниже:
<?php if(isset($_POST[‘submit’])){ $myusername=$_SESSION[‘myusername’]; $random=rand(); $my_id=mysqli_query($con,»SELECT ‘id’ FROM ‘users’ WHERE (‘username’=’$myusername’)»); $user=$_GET[‘user’]; $check_conv=mysqli_query($con,»SELECT ‘hash’ FROM ‘message_g’ WHERE (‘user_one’=’$my_id’ AND ‘user_two’=’$user’) OR (‘user_one’=’$user’ AND ‘user_two’=’$my_id’)»); if(mysqli_num_rows($check_conv) == 1){ echo «<p>Conversation Already Started!</p>»; } else { mysqli_query(«INSERT INTO ‘message_g’ (‘user_one’, ‘user_two’, ‘hash’) VALUES (‘$my_id’,’$user’,’$random’)»); echo «<p>Conversation Started!</p>»; } } ?> Лучший ответ:
Попробуйте загрузить ваш mysqli_result, в месте использования непосредственно в запросе
$my_id_query=mysqli_query($con,»SELECT ‘id’ FROM ‘users’ WHERE (‘username’=’$myusername’)»); //Fetch result $my_id_array=mysqli_fetch_assoc($my_id_query); $my_id=$my_id_array[‘id’]; //Cast this into int to protect yourself against sql injection $user=(int)$_GET[‘user’]; $check_conv=mysqli_query($con,»SELECT ‘hash’ FROM ‘message_g’ WHERE (‘user_one’=’$my_id’ AND ‘user_two’=’$user’) OR (‘user_one’=’$user’ AND ‘user_two’=’$my_id’)»); if(mysqli_num_rows($check_conv) == 1){ Ответ №1
mysqli_query возвращает объект. Вы не можете просто распечатать объект. Вам нужно прочитать документацию mysqli, чтобы узнать, что делать с результатами объекта mysqli_query.
http://us1.php.net/manual/en/mysqli.query.php
Ответ №2
Вот ваша проблема. Здесь вы делаете запрос и назначаете его $ my_id, считая, что вы получаете фактическое значение из столбца, но это не так.
$my_id=mysqli_query($con,»SELECT ‘id’ FROM ‘users’ WHERE (‘username’=’$myusername’)»);
Затем вы пытаетесь интерполировать его в строку во втором вызове:
$check_conv=mysqli_query($con,»SELECT ‘hash’ FROM ‘message_g’ WHERE (‘user_one’=’$my_id’ AND ‘user_two’=’$user’) OR (‘user_one’=’$user’ AND ‘user_two’=’$my_id’)»);
Для этого для работы $ my_id должна быть строка, но это не так. Это объект.
Кроме того, не связанные с вашими проблемами здесь, обратите внимание, что , создавая SQL-предложения с внешними переменными, вы оставляете себя открытым для SQL-инъекций. Кроме того, любые входные данные с одинарными кавычками в нем, такие как имя “O’Malley”, взорвут ваш SQL-запрос. Пожалуйста, узнайте об использовании параметризованных запросов, желательно с модулем PDO, для защиты вашего веб-приложения. На моем сайте http://bobby-tables.com/php есть примеры, чтобы вы начали, и этот вопрос содержит много примеров.