我的数据库中的表格设计如下,
AID INT(10) AUTO_INCREMENT
ID INT(20)
DATA VARCHAR(50)
Engine = MyISAM
我创建一个表单,以便将数据发送到执行SQL查询的函数。
<form method="post" action="test.php" >
<input type="text" name="id" /><BR/>
<input type="text" name="val1" /><BR/>
<input type="text" name="val2" /><BR/>
<input type="text" name="val3" /><BR/>
<input type="submit" name= "t" value="submit"/>
</form>
数组并回显结果:
if (isset($_POST['t'])){
foreach(array($_POST) as $data) {
echo send($data);
}
};
这是功能:
function send($data){
//MySQL connected
$do = $sql->prepare("SELECT id, data FROM test WHERE id =?");
$do->bindValue(1, $data['id'], PDO::PARAM_INT);
$do -> execute() ;
if ( $do -> rowCount()=== 1){
$getData = $do -> fetch();
return $getData['data'];
}
}
使用&#39; 1&#39; in&#39; id&#39;字段,函数返回数据&#39;从桌子上拿走。
然而,当使用&#39; 1aaxxacac&#39;要POST表单,该函数返回相同的结果。
我已经尝试过使用:
$do -> execute(array(':id'=>$data['id]));
替换上一个但仍然有同样的问题。 如果我在MySQL中将ID字段从INT更改为CHAR或VARCHAR,情况就解决了。
真诚地希望你们能帮我解决一下。
谢谢!
答案 0 :(得分:1)
涉及两个问题
一个是与mysql相关的,一个广为人知的,叫做#34;松散打字&#34;。 Mysql会在使用之前尝试转换数据:
mysql> select id from board where id='2foo';
+----+
| id |
+----+
| 2 |
+----+
PDO::PARAM_INT
不会将字符串值转换为int 。它测试值类型并相应地绑定:因此,如果它已经是int(或bool)类型,它只将值绑定为int。否则它被绑定为字符串并按原样发送到mysql。我不知道为什么它表现得如此奇怪,因此,它必须被记住。 我认为这里没有太多问题。