php mysql编写语句循环数组

时间:2016-07-15 10:37:52

标签: php mysql prepared-statement

我的问题是我想遍历一个数组并将该数组的每个条目插入到mySQL表的另一列中。说实话,我不确定这是否是设计我的数据库的最佳方式,但这是我能想象的一种方式,它有效。如果有人更好地了解如何做到这一点,或者是最佳做法或某事的链接,那就太棒了。

所以我想做的事情:我有一个表格,有人可以注册提供食品送货服务。他可以输入名称等,最多可以输入10个(数据库表的限制)。这些信息应该插入“anbieter”表中的'angebot_0','angebot_1'字段...... 所以我做的是:

if (isset($_POST['register_offer']) and isset($_POST['anbieter-email'])){

$name = $loc = $cat = $email = $password ="";
$angebot = array();
// fill all variables
$name = test_sql($_POST['anbieter-name']);
$email = test_sql($_POST['anbieter-email']);
$password = test_sql($_POST['anbieter-password']);
$loc = test_sql($_POST['anbieter-loc']);
$cat = test_sql($_POST['anbieter-cat']);
// fill $angebot with all given angebot[] entries
foreach($_POST['angebot'] as $ang) {
    $angebot[] = test_sql($ang);
}

if(!empty($name) and !empty($loc) and !empty($email) ){
    /* decrypt password */
    $password = password_hash($password, PASSWORD_BCRYPT, ["cost" => 12]);
    // insert name, email, password, location and category into database
    /* Prepared statement, stage 1: prepare */
  if (!($stmt = $conn->prepare("INSERT INTO anbieter (anbieter_name, anbieter_email, anbieter_password, anbieter_loc, anbieter_cat) VALUES (?, ?, ?, ?, ?)"))) {
     echo "Prepare failed: (" . $stmt->errno . ") " . $stmt->error;
    }
/* Prepared statement, stage 2: bind and execute */
  if (!$stmt->bind_param('sssss', $name, $email, $password, $loc, $cat)) {
    echo "Binding parameters failed: (" . $stmt->errno . ") " . $stmt->error;
    }
  if (!$stmt->execute()) {
    echo "Execute failed: (" . $stmt->errno . ") " . $stmt->error;
    }

$userid = $stmt->insert_id;
// safe all angebot[] entries to database - angebot[0]-> angebot_0
for($x=0; $x < count($angebot) ; $x++) {
    $upd = $conn->prepare("UPDATE anbieter SET angebot_".$x." = ? WHERE abieter_ID = ? ");
    $upd->bind_param('si', $angebot[$x], $userid);
    $upd->execute();
}

所以当我这样做时,我收到错误:

Fatal error: Call to a member function bind_param() on boolean in ...

使用$ x命名表的不同字段是一种非常糟糕的方法,但这是我能想到的唯一方法:/

我希望有人可以帮助我! :) 非常感谢!

2 个答案:

答案 0 :(得分:0)

我的建议是多次单记录更新查询,你可以在一个查询中完成,

例如:

$query = "UPDATE anbieter SET";
for ($x = 0; $x < count($angebot); $x++) {
    $query .= " angebot_" . $x . " = '" . $angebot[$x] . "', ";
}
echo $query .= " WHERE abieter_ID = " . $userid;

答案 1 :(得分:0)

非常感谢你的帮助,但它没有多大帮助:/ 在尝试了其他一些可能性之后,我解决了它:

$(document).ready(function(){

    $(window).resize(function(){
    if ($(window).width()<490) {
    $("#shown").unbind().click(function(){
        event.preventDefault();
        $("body div hidden").toggle('slow');
    });
    }

    else if ($(window).widht()>=490) {
        $("#shown").unbind();
        $("body div hidden").unbind();
    }
    });
});

</script>

也许它会帮助别人:)