2017-07-27 30 views
-1

nieaktualnyカラム(TINYINT(1))をすべてのローで0から1に変更する行があり、の値と等しいフィールドがemail_1です。私はexec()prepare()、​​を介して多くのアプローチを試みましたが、何も動作していないと私はちょうど理由を知りません。試行/捕捉時にエラーは表示されません。 phpMyAdminを使用しているとき、クエリはうまく動作します。ここでPDOでクエリを実行することができません

は私のPHPです:データを持つ配列で結構です

$sql = "UPDATE database.table SET `nieaktualny` = '1' WHERE `email_1` LIKE ?"; 
$stmt = $db->prepare($sql); 
foreach($sprawdzone_temp as $email) { 
    $stmt->execute(array($email)); 
} 

、私はPDOを使用する方法に何か問題があるようです。

+0

ウェブサーバーのエラーログを確認しましたか? try/catchステートメントを見てみましょう。 –

+3

'nieaktualny' = '1'ブール値の代わりに文字列値を渡しています –

+0

' $ sprawdzone_temp'には何の価値がありますか? –

答えて

1

は、私はあなたの$sprawdzone_tempSQL Wildcard Characters

ワイルドカード文字が文字列内の他の文字を置き換えるために使用されていない可能性があることを疑います。

ワイルドカード文字は、SQL LIKE演算子とともに使用されます。 LIKE演算子は、WHERE句で列の指定されたパターンを検索するために使用されます。

LIKE演算子と組み合わせて使用​​される二つのワイルドカードがあります

  1. (%)は - パーセント記号は、ゼロ、1つ、または複数の文字

2を表します。 (_) - アンダースコアは、単一の文字

を表し、したがって、あなたのコードは、これらの線に沿って次のようになります。

<?php 

$sprawdzone_temp = "%".$sprawdzone_temp."%"; 
$sql = "UPDATE database.table SET `nieaktualny` = 1 WHERE `email_1` LIKE ?"; 
$stmt = $db->prepare($sql); 
foreach($sprawdzone_temp as $email) { 
    $stmt->execute(array($email)); 
} 

if(!$stmt){ 

echo "\nPDO::errorInfo():\n"; 
print_r($db->errorInfo()); 
} 

?> 

更新

私はあなたにもオペレータでSQLを試すことを示唆し、これWHERE句に複数の値を指定できます。

IN演算子は複数のOR条件の省略形です。

<?php 

$sprawdzone_temp = array($nadawca); 

$in = str_repeat('?,', count($sprawdzone_temp) - 1) . '?'; 

$sql = "UPDATE database.table SET `nieaktualny` = 1 WHERE `email_1` in($in)"; 
$stmt = $db->prepare($sql); 
$stmt->execute($sprawdzone_temp); 
if (!$stmt) { 
    echo "\nPDO::errorInfo():\n"; 
    print_r($db->errorInfo()); 
} else { 

    echo "record updated"; 
} 

?> 
+0

はい、私はそれを試しました:配列は$ sprawdzone_temp [] = "%"。$ nadawca。 "%";で準備されています。 –

+0

まだ結果が得られていませんか?あなたが得ているエラーメッセージは何ですか? –

+0

なしerror_reporting(E_ALL)からではなく、try/catchからではありません。何かbind_paramを使わなければならないのですか? –

0

TL; DR 私は後でPDOクエリで使用されたメールにstrip_tagsを適用しなければなりませんでした。

問題はクエリに関連するものではありませんでした。 $sprawdzone_temp配列の電子メールが正しく準備されていませんでした。私がprint_rを編集したとき、それは普通に見えましたが、スペースや似たものがない正しい電子メールアドレスがあっただけです。 print_rからphpMyAdminにコピーしたとき、クエリは正常に動作しましたが、SQLクエリーのLIKE条件を中断していたような不正な文字があるようです。

電子メールアドレスを$sprawdzone_tempアレイに挿入するときにランダムに試してみたところ、strip_tagsを修正しました。今それは動作します。好奇心の外に - 私は何とかすべてのキャラクターを何とか印刷することができます - ちょうどそのキャラクターがPDOクエリーを止める原因となったのかを確認するだけですか?

関連する問題