当我尝试插入一个包含保留字的数组时遇到问题。
我可能会说真的很奇怪,看看:
$sql="INSERT INTO sites (cat_id, cat_title, cat_parent, title, image, site_name, description) VALUES ('$_POST[cat_id]','$_POST[cat_title]','$_POST[cat_parent]','$title','$image','$site_name','$description')";
该数组来自我创建的opengraph fetch,但这并不重要,问题是有时当数组$title或$image上有一个保留字如“use”时,sql会返回错误“错误:您的 SQL 语法有错误;请查看相应的手册……”
就是这样:
当数组 $title = http://techcrunch.com/2012/08/28/flipboard-hits-20-million-users-3-billion-flips-per-month/ <---- 它不起作用我收到上面的错误。
当数组为 $title = http://techcrunch.com/2012/08/27/google-nexus-7-is-now-available-in-france-germany-and-spain/ <---- 它有效美好的!
所以我认为这可能是因为数组 $title 有时(或我正在使用的任何其他数组)中有一个“保留字”会返回错误......所以有任何方法可以保护我的数组免受这个错误的影响?
谢谢!:)
编辑:
解决方案
行!我遵循了@dystroy 和@tadman 的建议,并使用了 PDO 而不是常规的 mysql 连接......我不知道我是否完全可以防止 SQL 注入或攻击,但它用保留字解决了我的问题。现在我可以将 $array 中的任何内容插入到数据库中。
如果有人在这里遇到同样的问题,这就是我所做的(如果你们发现任何尴尬,请抱怨):
$dbh = new PDO("mysql:host=MYHOST;dbname=MYDATABASE", "USER", "PASS");
$query = "INSERT INTO sites (cat_id, cat_title, cat_parent, title, image, site_name, description) VALUES (:cat_idpost, :cat_titlepost, :cat_parentpost, :titlepost, :imagepost, :site_namepost, :descriptionpost)";
$stmt = $dbh->prepare($query);
$stmt->bindParam(':cat_idpost', $cat_id);
$stmt->bindParam(':cat_titlepost', $cat_title);
$stmt->bindParam(':cat_parentpost', $cat_parent);
$stmt->bindParam(':titlepost', $titlepost);
$stmt->bindParam(':imagepost', $imagepost);
$stmt->bindParam(':site_namepost', $site_namepost);
$stmt->bindParam(':descriptionpost', $descriptionpost);
$cat_id = $_POST['cat_id'];
$cat_title = $_POST['cat_title'];
$cat_parent = $_POST['cat_parent'];
$titlepost = $title;
$imagepost = $image;
$site_namepost = $site_name;
$descriptionpost = $description;
$stmt->execute();
谢谢你们!:D