2015-10-08 61 views
0

我用這個代碼,我的phpMyAdmin的版本 - 4.0.10.2的Joomla SQL語法錯誤

<?php 

    $db = JFactory::getDBO(); 

    $pid = $forum['Review']['listing_id']; 

    $ipaddress = $forum['User']['ipaddress']; 

    $query = "SELECT count(ipaddress) AS addresses_found FROM threads WHERE ipaddress = {$ipaddress} AND pid = {$pid}"; 

    $count_ip = $db->setQuery($query)->loadResult(); 

    if($count_ip >= 2){ 
    echo '<p> Your ip repeated </ p>'; 
    } 

    ?> 

,看到這個錯誤:

您的SQL語法錯誤;檢查對應於你的MySQL服務器版本的第1行SQL = SELECT COUNT(ip地址)AS addresses_found FROM線程使用近「和PID = 315」正確的語法手冊其中IP地址127.0.0.0 =和PID = 315

那是什麼?

回答

7

「那是什麼?」

這意味着$ipaddress包含MySQL的抱怨,作爲一個字符串中的字符,並且不像{$pid}整數可以保持相同(如果該列也是一個int)。

WHERE ipaddress = {$ipaddress}

$ipaddress變量需要被包裹在引號:

WHERE ipaddress = '$ipaddress'

上的補充說明;你的代碼很容易被SQL注入。這是最好用準備好的語句:

如果有任何用戶輸入或交互。

+1

你打我吧。的確,IP地址包含點。再次,這裏需要投注系統:) – taxicala

+0

thx guys!使用'$ pid'!請給我解釋一下關於SQL注入的問題。我如何保護這段代碼? – Brigadier

+0

不客氣@Brigadier看到,在我的答案的鏈接。它解釋它幷包含您可以諮詢的外部鏈接。 –