查询不会将值插入DB

时间:2015-10-08 07:29:21

标签: php sql

在我的查询中,update语句不起作用,给出的错误是:

  
    

参数数量与准备好的声明

不匹配   

这是我的代码:

create table #t(Id int identity(1,1),Data varchar(1000))
Insert into #t Values
    ('Column1: Value1'),('Column2: Value11'),('Column3: Value111')
    ,('Column1: Value2'),('Column2: Value22'),('Column3: Value222')

Declare @sql nvarchar(max)

Select @sql = '
        Select '+left(c, len(c)-1)+' From (
        Select col, val, id = ROW_NUMBER() over(partition by d.col order by d.id)
        From (
             Select id
                , col = LEFT(Data, CHARINDEX('':'', Data)-1)
                , val = RIGHT(Data, LEN(DATA) - CHARINDEX('':'', Data))

             From #t
        ) as d
    ) as p
    pivot(
        MAX(val)
        FOR col in('+left(c, len(c)-1)+')
    ) as piv
'
From (
    Select Distinct '['+LEFT(Data, CHARINDEX(':', Data)-1)+'], '
    From #t
    FOR XML PATH('')
) as d(c)

EXEC sp_executesql @sql

代码进入public function update_resource($resource) { $mysqli = new MySQLi(HOST, USERNAME, PASSWORD, DATABASE); $this->connection_state($mysqli); $id = $resource['id']; $descrizione = $resource['descrizione']; $sigla = $resource['sigla']; $colore = $resource['colore']; $planning = $resource['planning']; try { $query = "UPDATE risorse SET descrizione = '$descrizione' AND sigla = '$sigla' AND colore = '$colore' AND planning = '$planning' WHERE id = '$id' "; $stmt = $mysqli->prepare($query); $stmt -> bind_param("ssssi", $descrizione, $sigla, $colore, $planning, $id); echo $query; if($stmt->execute()) { echo "Added!"; } else { echo "Err: " . $stmt->error; } }catch(Exception $e){ echo $e->getMessage(); } } 条件,但查询失败,问题是什么?

3 个答案:

答案 0 :(得分:2)

public function update_resource($resource)
{
    $mysqli = new mysqli(HOST, USERNAME, PASSWORD, DATABASE);

    if ($mysqli->connect_errno) {
        echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
    }

    $id = $resource['id'];
    $descrizione = $resource['descrizione'];
    $sigla =       $resource['sigla'];
    $colore =      $resource['colore'];
    $planning =    $resource['planning'];

    try
    {   
        $query =    "UPDATE risorse SET descrizione = '$descrizione'
                        , sigla = '$sigla', colore = '$colore', planning = '$planning'
                        WHERE id = '$id' ";

        $stmt = $mysqli->prepare($query);
        $stmt -> bind_param($descrizione, $sigla, $colore, $planning, $id);
        echo $query;

        if($stmt->execute())
        {
            echo "Added!";
        }
        else
        {
            echo "Err: " . $stmt->error;    
        }

    }catch(Exception $e){   echo $e->getMessage();      }

}?

答案 1 :(得分:0)

您的问题是您的查询中没有任何占位符。 请参阅manual以了解如何设置占位符。

通常,占位符为?,稍后将替换为值,因此您的查询应如下所示:

$query = "UPDATE risorse SET descrizione = ?
                    AND sigla = ? AND colore = ? AND planning = ?
                    WHERE id = ?";

答案 2 :(得分:0)

请访问http://php.net/manual/en/pdostatement.bindparam.php.you得到你的回答。参见示例#1执行带有命名占位符的预准备语句