0

$ _POST ['name']を使用しているときにデータ型がどうなるか知りたいのですが、パラメーターをバインドしている場合は次のようになります。

$unsafe_variable1=$_POST['name'];
$unsafe_variable2=$_POST['email'];
$unsafe_variable3=$_POST['city'];

$stmt=$con->prepare("INSERT INTO mytable (name, email, city) VALUES ('$bname', '$email', '$city')");

$obj->bind_param('sss', $unsafe_variable1, $unsafe_variable3, $unsafe_variable3);

私の推測は文字列の「s」です。


そして2つ目は、sssを使用すると、警告が表示されることです。

Number of variables doesn't match number of parameters in prepared statement

そのため、おそらく「s」は適切なデータ型ではないと思います。:o

4

2 に答える 2

0

$ _POST&$_GETパラメータは常に文字列になります。

gettype()を使用して、次のことを確認できます。

echo gettype($_POST['variable_from_form']);

一例として、ブール値ではなく、文字列、文字列、文字列、および文字列として認識さ1れることがわかります。これは、phpがPHPの型ジャグリングシステムを使用して非文字列値を文字列に変換するためです。1.11any texttrue/false

于 2016-04-07T15:13:45.233 に答える
-1

変数を直接使用していることに注意してください。

[...] VALUES ('$bname', '$email', '$city')

次のように変更するだけです。

[...] VALUES (?, ?, ?)

POST変数は通​​常文字列です。したがって、sssバインディングは完璧です。将来的に問題を回避するには、次のことができます。

$stmt = $con->prepare("INSERT INTO mytable (name, email, city) VALUES (:name, :email, :city)");
$params['name'] = $_POST['name'];
$params['email'] = $_POST['email'];
$params['city'] = $_POST['city'];
$stmt->execute($params);

これにより、変数のタイプが自動的に検出され、バインドされます。

于 2013-03-11T21:28:04.560 に答える