我尝试在SQL语句中使用变量,我尝试过mysql_real_escape_string但仍然失败

时间:2014-03-31 10:47:12

标签: php sql

我得到的错误是:

致命错误:未捕获异常'PDOException',消息'SQLSTATE [42S22]:未找到列:1054'where子句'中的未知列'gz_01'

这是我的原始代码:

    // $universityID would be column name like gz_01, gz_02, wh_01, wh_02...etc...
    // value in gz_01 column is int type
    $universityID = "gz_01";

    addSubscription($universityID);

    function addSubscription($university){

    Here I skip the codes of connection to SQL

    // count the subscription
    $sql = "UPDATE qr_code_count
            SET $university = $university + 1
            ";                      

    $pdo->exec($sql);
    }

但是gz_01中的值不会为每个addSubscription()调用添加1。

当我使用 $ sql =“UPDATE qr_code_count SET gz_01 = gz_01 + 1”时,我的代码按预期工作,gz_01中的值为每个addSubscription()调用添加一个。

我在stackoverflow上搜索了答案并找到了使用mysql_real_escape_string()的可能解决方案,但我的代码仍然失败。

任何人都可以给我一个关于我的代码有什么问题的指针吗?感谢。

7 个答案:

答案 0 :(得分:3)

试试这个

$sql = 'UPDATE qr_code_count SET `'.$university.'` = `'.$university.'` + 1';  

答案 1 :(得分:1)

所以你有一行看起来像这样的数据库表吗?

|  z_01  |  gz_02  |  wh_01  |  wh_02  |
|   0    |    1    |    3    |    4    |

为什么不把桌子弄好呢?

|  university_id  |  qr_code_count  |
|      z_01       |       0         |
|      gz_02      |       1         |
|      wh_01      |       3         |
|      wh_02      |       4         |  

然后,您可以更简单地更新错误:

function addSubscription($uniId){

    $stmt = $dbh->prepare("UPDATE qr_code_count
                           SET qr_code_count = qr_code_count + 1
                           WHERE university_id = :university_id");

    $stmt->bindParam(':university_id', $uniId, PDO::PARAM_INT);
    $pdo->exec($sql);
}

$universityID = "gz_01";

addSubscription($universityID);

答案 2 :(得分:0)

如果在数据库表中将id设置为auto_increment,则不需要将id增加1,但是您必须删除id中的“gz_”部分。

答案 3 :(得分:0)

试试这个

$sql = "UPDATE qr_code_count
        SET :columnName1 = :columnName2 + 1
        ";                      
$stmt = $pdo->prepare($sql);
$stmt->bindParam(':columnName1', $universityID, PDO::PARAM_STR);
$stmt->bindParam(':columnName2', $universityID, PDO::PARAM_STR);
$stmt->execute();

答案 4 :(得分:0)

假设您的大学始终采用格式gz_01, gz_02, wh_01, wh_02...etc... 字母下划线和数字。下面的代码将起到魔力。

  function addSubscription($university){
    $universitySub = $university[0].$university[1].$university[2];
    $universityNumberInc = ($university[3].$university[4]+1);
    if(strlen($universityNumberInc) < 2) { $universityNumberInc = "0".$universityNumberInc;}
    $universityinc =  $universitySub.$universityNumberInc;

$sql = "UPDATE qr_code_count
            SET $university = $universityinc;
            ";                      

    $pdo->exec($sql);
    }

+1到$university之前和之后的图片 enter image description here

答案 5 :(得分:0)

if $university = 'gh_01'
get only number from above string using below code
$num = intval(preg_replace("/[^0-9]/", "", $university ));
$num=$num+1;
get only letters
$letter=preg_replace('/[0-9]/','',$university);
$unversity=$letter.'_'.$num; // combine both letter and number
$sql = "UPDATE qr_code_count SET '".$university."' = "'.$university."'"; 

答案 6 :(得分:-1)

mysql_connect('localhost','root','root');
mysql_select_db('prenium');
$university="property_id";
$sql = 'UPDATE property_images
        SET '.$university.' = '.$university.'+1'; 

if(mysql_query($sql)) echo "DONE !";
else die(mysql_error());

我已经测试了这个,它和我一起工作

<强> EDITED