0

このクエリを使用してテーブルを更新しようとしていますが、うまくいかないようです。

  $query="UPDATE product SET qty = (qty - '$qty') WHERE barcode = '$barcode'";  
  $result = $this->db->conn_id->prepare($query);
  $result->execute();  

クエリを try catch ブロック内に配置しようとしましたが、エラーはスローされません。このクエリは codeigniter の外部で実行されたときに機能するため、問題は CodeIgniter の実装にあります。

4

2 に答える 2

1

あなたのコードを見ると、いくつかのことがあります。

準備されたステートメントを正しく使用していません。プリペアド ステートメントを使用する利点は、必要な変数を別の関数で渡すことで、変数を正しくエスケープできることです。次の点を考慮してください。

$query="UPDATE product SET qty = (qty - ':qty') WHERE barcode = ':barcode'";  

$stmt = $this->db->conn_id->prepare($query);

$stmt->bindParam(':qty', $qty, PDO::PARAM_STR);
$stmt->bindParam(':barcode', $barcode, PDO::PARAM_STR);

$stmt->execute();  

echo "Rows affected: " . $stmt->rowCount();

ここでは、クエリを取得し、パラメータを設定します。次に、変数をステートメントにバインドして、適切にエスケープします。その後、ステートメントを実行し、fetch()関数を使用して応答を取得できます。渡された列挙は、結果を連想配列として返します。

于 2012-12-27T15:32:57.040 に答える
0

影響を受ける行がゼロの場合、クエリは正しいと思います。バーコード変数の値がデータベースに存在するかどうかを確認してください

于 2012-12-27T15:55:49.023 に答える