PDA

View Full Version : سوال: خطای Fatal error: Call to a member function fetch() on a non-object



mirzajavad
چهارشنبه 16 مهر 1393, 21:47 عصر
کجای این کد اشتباهه که اینجور اروری میده ؟




if (isset($_POST['search']) AND !empty($_POST['search'])) {

$search = $_POST['search'];
$query = $pdo -> prepare("SELECT * FROM `users` WHERE `fname` LIKE :search OR `lname` LIKE :search");
$result = $query->execute(array(
':search' => '%' . $search . '%'
));
$rows = $result->fetch();
foreach ($rows as $res) {
echo $res['fname'];
echo '<br>';
echo $res['lname'];
}
}

DR.HTML
چهارشنبه 16 مهر 1393, 23:21 عصر
کلا استفاده از Fetchall بهتر از Fecth ضمنن چرا از bind_param اسفتاده نمیکنین ؟ ':search' => '%' . $search . '%'

درصدها رو چرا توی کوئری اصلی نمیزارید ؟

mirzajavad
چهارشنبه 16 مهر 1393, 23:52 عصر
الان مشکل این خطا هستش آخه من همه نکاتی رو که گفتین اجرا کردم ولی بازم همین خطا رو میده

MMSHFE
پنج شنبه 17 مهر 1393, 12:55 عصر
شئ pdo$ ساخته نشده یا کوئری خطا داشته. دقت کنید قبلش اتصال به دیتابیس به درستی برقرار شده باشه یا result$ مقدار false نداشته باشه.

saeed-71
پنج شنبه 17 مهر 1393, 12:59 عصر
اینجوری استفاده کن


if (isset($_POST['search']) AND !empty($_POST['search'])) {

$search = $_POST['search'];
$query = $pdo -> prepare("SELECT * FROM `users` WHERE `fname` LIKE :search OR `lname` LIKE :search");
$result = $query->execute(array(
':search' => '%' . $search . '%'
));
//$rows = $result->fetch();
foreach ($result as $res) {
echo $res['fname'];
echo '';
echo $res['lname'];
}
}

mirzajavad
پنج شنبه 17 مهر 1393, 15:28 عصر
غسضم
شئ pdo$ ساخته نشده یا کوئری خطا داشته. دقت کنید قبلش اتصال به دیتابیس به درستی برقرار شده باشه یا result$ مقدار false نداشته باشه.

شی pdo$ ساخته شده و کوئری رو هم بررسی میکنم به خطایی نرسیدم چون تغییرش دادم و با mysql تست کردم جواب میده مقدار result$ هم true هستش

mirzajavad
پنج شنبه 17 مهر 1393, 15:30 عصر
اینجوری استفاده کن


if (isset($_POST['search']) AND !empty($_POST['search'])) {

$search = $_POST['search'];
$query = $pdo -> prepare("SELECT * FROM `users` WHERE `fname` LIKE :search OR `lname` LIKE :search");
$result = $query->execute(array(
':search' => '%' . $search . '%'
));
//$rows = $result->fetch();
foreach ($result as $res) {
echo $res['fname'];
echo '';
echo $res['lname'];
}
}


اینجوری بدون fetch کردن مگر میشه از foreach استفاده کرد ؟

MMSHFE
پنج شنبه 17 مهر 1393, 15:33 عصر
مشکل مشخص شد! دوست عزیز true یا false که شئ نیستن که متد روشون صدا بزنید. شما باید $query->fetch() رو بکار ببرین. از خروجی execute فقط برای چک کردن اینکه کوئری اجرا شده یا نه باید استفاده کنید.

mirzajavad
پنج شنبه 17 مهر 1393, 16:45 عصر
آهان متوجه شدم چون حواسم نبود مقدار result$ از نوع boolean هستش

saeed-71
پنج شنبه 17 مهر 1393, 17:33 عصر
اینجوری بدون fetch کردن مگر میشه از foreach استفاده کرد ؟

بله میشه اگه بخوای اثباتم میکنم :لبخند:



if (isset($_POST['search']) AND !empty($_POST['search'])) { $search = $_POST['search']; $query = $pdo -> prepare("SELECT * FROM `users` WHERE `fname` LIKE :search OR `lname` LIKE :search"); $result = $query->execute(array( ':search' => '%' . $search . '%' )); //$rows = $result->fetch(); foreach ($result as $res) { echo $res['fname']; echo ''; echo $res['lname']; }}

mirzajavad
پنج شنبه 17 مهر 1393, 18:35 عصر
بله میشه اگه بخوای اثباتم میکنم :لبخند:



if (isset($_POST['search']) AND !empty($_POST['search'])) { $search = $_POST['search']; $query = $pdo -> prepare("SELECT * FROM `users` WHERE `fname` LIKE :search OR `lname` LIKE :search"); $result = $query->execute(array( ':search' => '%' . $search . '%' )); //$rows = $result->fetch(); foreach ($result as $res) { echo $res['fname']; echo ''; echo $res['lname']; }}



نمیشه :لبخند: