PHPでは動作しませんが、MySQLではうまく動作するmysqlクエリがあります。 以下は、POST変数を処理し、mysqlクエリ用に処理するHTMLフォームの部分的なコードです。PHP mysqlクエリはPHPでは動作しませんが、MySQLでうまく動作します
以下を参照してください。
<?php
$codes = $_POST['codes'];
// get as array like so
$barcodes = explode("\n", $codes);
// build up string of barcodes
$barcode_str = "";
$prefix = '';
foreach ($barcodes as $barcode){
$barcode_str .= $prefix . "'" . $barcode . "'";
$prefix = "," ;
}
$dbhost = 'localhost:3036';
$dbuser = 'xxxx';
$dbpass = 'xxxx';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db('disks');
$sql = "SELECT cust, manu, model, serial, capacity, firmware, method, date, stime, etime, wks, result
FROM hdds WHERE serial IN ($barcode_str) ;";
echo $sql;
$retval = mysql_query($sql, $conn);
if(! $retval)
{
die('Could not get data: ' . mysql_error());
}
$result = mysql_query($sql);
while($row = mysql_fetch_array($result)) {
echo $row['manu'];
}
while($row = mysql_fetch_array($retval, MYSQL_ASSOC))
{
/** Lets remove 20000000000000 bytes values from capacity array */
preg_match('/\[(.*?)\]/', $row['capacity'], $matches);
if (isset($matches[1])) {
$row['capacity'] = $matches[1];
}
echo '<tr>';
echo
"<td> {$row['manu']} </td>".
"<td> {$row['model']} </td>".
"<td> {$row['serial']} </td>".
"<td> {$row['capacity']} </td>".
"<td> {$row['firmware']} </td>".
"<td> {$row['method']} </td>".
"<td> {$row['date']} </td>".
"<td> {$row['stime']} </td>".
"<td> {$row['etime']} </td>".
"<td> {$row['wks']} </td>".
"<td> {$row['result']} </td>".
"<td> <a href=\"certificate.php?Customer={$row['cust']}&serial={$row['serial']}&manu={$row['manu']}&capacity={$row['capacity']}&method={$row['method']} \">Print</a>";
/** foreach($row as $key=>$value) {
echo '<td>',$value,'</td>';
}*/
echo '</tr>';
}
mysql_close($conn);
?>
上記のように、私は$ sqlクエリをエコーして、画面に次のように表示されます。
SELECT cust, manu, model, serial, capacity, firmware, method, date, stime, etime, wks, result FROM hdds WHERE serial IN ('5MQ3DJPM ','5MQ3DJPM ','5MQ3DJPM ','') ;
このクエリを実行すると、行が戻ってきています。
PHPでは何も返されませんが、エラーはありません。
しかし、PHPクエリを静的クエリに置き換えても機能しますが、変数を使用してクエリを動作させたいのです。
[mysql_ *]を使用しないでください(http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php?rq=1)。 mysql_ *関数は時代遅れであり、非推奨です(http://us3.php.net/manual/en/intro.mysql.php)。 ['MySQLi'](http://us3.php.net/manual/en/book.mysqli.php)または[' PDO'](http://us3.php.net/manual/en/intro。 pdo.php)を使用してください。 –
また、[** SQLインジェクション**](https://www.owasp.org/index.php/SQL_Injection)もご利用いただけます。クエリに変数を連結するのではなく、プリペアドステートメントを使用する必要があります。 「PHPでのSQLインジェクションを防ぐには?」(http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php?rq=1)を参照してください。 –
コードで何か他のことを行う前に、上記の問題を修正する必要があります。このコードは非常に安全です。 –