【发布时间】:2016-06-16 15:17:25
【问题描述】:
我编写了一个函数来在任何数据库中插入我想要的内容:
public function insert($db, $array_label, $array_value){
$DB = new PDO('mysql:host='.$_SESSION['mysql'][0].';dbname='.$_SESSION['mysql'][1].';charset=utf8', $_SESSION['mysql'][2], $_SESSION['mysql'][3]);
$sql = "INSERT INTO '".$db."' (";
for($i = 0; $i < count($array_label); $i++){
if($i > 0)
$sql .= ", ";
$sql .= "'".$array_label[$i]."'";
}
$sql .= ") VALUES (";
for($i = 0; $i < count($array_label); $i++){
if($i > 0)
$sql .= ", ";
$sql .= ":".$array_label[$i];
}
$sql .= ")";
$stmt = $DB->prepare($sql);
echo '\$DB->prepare("'.$sql.'");';//DEBUG
for($i = 0; $i < count($array_label); $i++){
$label = ":".$array_label[$i];
$stmt->bindParam("$label", $array_value[$i]);
echo '</br>\$stmt->bindValue("'.$label.'", '.$array_value[$i].')';//DEBUG
}
$stmt->execute;
echo "</br></br>Requête OK.";
}
}
然后,我像这样使用它:
$array_label = array('ID', 'ID_lang', 'ID_entry_cat', 'date', 'label', 'content');
$array_value = array($ID, $ID_lang, $ID_entry_cat, "2016-03-03 00:00:00", $label, $content);
$DB->insert('entry', $array_label, $array_value);
经过大量测试,它可能有语法问题,但我无法弄清楚在哪里。
这是我从 echo's(//DEBUG) 中得到的:
$DB->prepare("INSERT INTO 'entry' ('ID', 'ID_lang', 'ID_entry_cat', 'date', 'label', 'content') VALUES (:ID, :ID_lang, :ID_entry_cat, :date, :label, :content)");
\$stmt->bindValue(":ID", 1)
\$stmt->bindValue(":ID_lang", 1)
\$stmt->bindValue(":ID_entry_cat", 1)
\$stmt->bindValue(":date", 2016-03-03 00:00:00)
\$stmt->bindValue(":label", dsqfsdq)
\$stmt->bindValue(":content", sdqfdsqf)
我知道有很多关于 PDO 的主题不返回错误但是: 在阅读了很多之后,它根本没有帮助我。 可以这样说:我是 PDO 的菜鸟。
我向你展示的回声就是我的函数正在做的事情。
我附上了一些我的数据库的图片以提供帮助:
PS:我省略了“日期”,但它不应该制造麻烦。我用它测试了同样的东西,它做了同样的事情:什么都没有。
【问题讨论】:
-
$stmt->execute;是错字吧? -
日期字段中不允许有 Null。你试图把什么放在那里?什么价值?
-
PhpMyAdmin 如果您什么都不放,请在该字段中填写一些内容。
-
在这种情况下您使用的是 PDO,我敢打赌它会尝试将 NULL / nothing 添加到导致它失败的字段,因为字段不允许包含 NULL 或什么都没有
-
即使是假日期 -> "2016-03-03 00:00:00" 也不起作用。
标签: php mysql sql pdo phpmyadmin