2015-03-13 3 views
0

Я вытягиваю свои волосы. У меня есть два оператора SELECT, которые в основном являются одним и тем же принципом. Первый работает, а второй не будет работать с предложением WHERE. Мне нужны свежие глаза и предложения. Я был на каждом форуме и читал каждый пост и пробовал много «решений» безрезультатно. Надеясь, что кто-то увидит то, что я пропустил.Mysql SELECT с предложением WHERE, которое не работает с переменной

$oID = zen_db_prepare_input($_GET['oID']); 

    // Color coding for invoice -Start queries--- 

    $query = "SELECT * FROM cart1_orders WHERE orders_id = $oID"; 
    $result = $db->Execute($query); 
    $shiploc = $result->fields['shipping_method']; 
    if ($result->RecordCount() > 0) { 
    echo 'Test Query: = ' . $result->fields['shipping_method']; 
    } else { 
    echo 'Sorry, no record found for product number ' ; 
    } 

    $sql = "SELECT * FROM cart1_store_locations WHERE pickup_name= $shiploc"; 
    $results = $db->Execute($sql); 
    $newcolorblock = $results->fields['color_code']; 
    if ($results->RecordCount() > 0) { 
    echo 'Color Query: = ' . $results->fields['color_code']; 
    echo 'Location: = '. $results->fields['pickup_name']; 
    } else { 
    echo 'Sorry, no record found for Color Code ' ; 
    } 

Заранее благодарю вас за помощь и предложения, надеюсь, вы сможете увидеть что-то, чего я не могу.

Результаты первого запроса: Test Query: = Store Pickup (Mooresville - Gold's Gym) Результаты второго запроса: ПРЕДУПРЕЖДЕНИЕ: Произошла ошибка, обновите страницу и повторите попытку.

Если предложение WHERE удалено, оно возвращает значения, но не правильные. Мне нужна инструкция WHERE для получения правильной информации.

ОТВЕТ любезно предоставленный bloodyKnuckles :)

$sql= "SELECT * FROM cart1_store_locations WHERE pickup_name= $shiploc"; 

изменено на следующее: (Необходимо, чтобы экранировать сравнительному для «с в таблице данных)

$shiploc_escaped = mysql_escape_string($shiploc); 
$sql = "SELECT * FROM cart1_store_locations WHERE pickup_name=  '".$shiploc_escaped."'"; 

Я не использовал этот форум раньше. ЛЮБИТЬ ЭТО!!! Всем спасибо!

+0

ли '$ shiploc' строку? Похоже, вы рассматриваете его как целое (не цитируется). – bloodyKnuckles

+0

Да, должна быть строка. Я пробовал одинарные кавычки с ним, и это тоже не работает. – kngiggles

+0

Вам действительно нужно узнать о соединениях SQL и параметризованных операторах. – eggyal

ответ

0

Поскольку ваша строка имеет апостроф в нем:

Магазин Pickup (Mooresville - Золото Gym)

... Вам нужно избежать изменения $shiploc:

$shiploc_escaped = addslashes($shiploc); 
$sql = "SELECT * FROM cart1_store_locations WHERE pickup_name= '".$shiploc_escaped."'"; 

Чтение на Zen Cart Escaping Content, по-видимому, это вариант:

$sql = "SELECT * FROM cart1_store_locations WHERE pickup_name= '".$db->prepare_input($shiploc)."'"; 

... и, еще лучше, это:

$sql = "SELECT * FROM cart1_store_locations WHERE pickup_name= :pickup_name:"; 
$sql = $db->bindVars($sql, ':pickup_name:', $shiploc, 'string'); 
+0

Я хочу КИССАТЬ вас !!!! Это сработало спасибо! Один вопрос ... Я вполне уверен, что zen cart использует mysqli, так что это то, что я использовал на пользовательских страницах Это не так? Знаете ли вы? – kngiggles

+0

http://php.net/manual/en/mysqli.real-escape-string.php требует, чтобы соединение передавалось этой функции. 'Mysqli_real_escape_string ($ shiploc)' будет терпеть неудачу –

+0

Спасибо! по достоинству оцените всю помощь. – kngiggles

0

Ваш $shiploc может быть null. Перед вторым запросом напишите var_dump($shiploc); и сообщите нам, что вы получаете.

EDIT

$oID = zen_db_prepare_input($_GET['oID']); 

    // Color coding for invoice -Start queries--- 

    $query = "SELECT * FROM cart1_orders WHERE orders_id = $oID"; 
    $result = $db->Execute($query); 
    $shiploc = $result->fields['shipping_method']; 
    if ($result->RecordCount() > 0) { 
    echo 'Test Query: = ' . $result->fields['shipping_method']; 
    } else { 
    echo 'Sorry, no record found for product number ' ; 
    } 

    $sql = "SELECT * FROM cart1_store_locations WHERE pickup_name= '".$shiploc."'"; 
    $results = $db->Execute($sql); 
    $newcolorblock = $results->fields['color_code']; 
    if ($results->RecordCount() > 0) { 
    echo 'Color Query: = ' . $results->fields['color_code']; 
    echo 'Location: = '. $results->fields['pickup_name']; 
    } else { 
    echo 'Sorry, no record found for Color Code ' ; 
    } 
+0

строка (39) «Store Pickup (Mooresville - Gold's Gym)». Это результат. Точно как это должно проявляться. – kngiggles

+0

так что это строка ...поэтому вы должны использовать одинарные кавычки между '$ shiploc', чтобы проверить мой ответ. Я собираюсь отредактировать его –

+0

Я уже пробовал одиночные кавычки, и я до сих пор получаю сообщение об ошибке. '$ shiploc' – kngiggles

Смежные вопросы