Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Selecting MySql table data into an array using PDO class?

I have found some info here, but can comment to ask additional info. So my problem is: I want to select my data from mySQL. I have two tables: customers (id,name,ak,numeris) prekes (id, customer_id, prek_name, prek_value)

id in both tables is auto incremented.

I try to fill array?

I have only one value passed (customers.id). there are 5 records with same prekes.customer_id.

$pdo = Database::connect();
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = 'SELECT * FROM prekes WHERE customer_id=' . $pirkejas . ''; //$pirkejas = id passed via $_POST.
$q = $pdo->prepare($sql);
foreach ($pdo->query($sql) as $row) {
    //      if ($row['prek_pav'] != '') {
    $prekes = array($row['prek_name'], $row['prek_value']);

    Database::disconnect();

How to fill array $prekes in correct way?

Edit:

I want to print value in my form:

<table class="table-bordered">
<tr>
<td><input class="input-medium" name="prekes[1][pavadinimas]" type="text"  placeholder="Prekė" value=""></td>
<td><input class="input-medium" name="prekes[1][kaina]" type="text"  placeholder="Kaina" value=""></td>
</tr>
<tr>
<td><input class="input-medium" name="prekes[2][pavadinimas]" type="text"  placeholder="Prekė" value=""></td>
<td><input class="input-medium" name="prekes[2][kaina]" type="text"  placeholder="Kaina" value=""></td>
</tr>
<tr>
<td><input class="input-medium" name="prekes[3][pavadinimas]" type="text"  placeholder="Prekė" value=""></td>
<td><input class="input-medium" name="prekes[3][kaina]" type="text"  placeholder="Kaina" value=""></td>
</tr>
<tr>
<td><input class="input-medium" name="prekes[4][pavadinimas]" type="text"  placeholder="Prekė" value=""></td>

I my action does:

$pdo = Database::connect();
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $sql = "INSERT INTO customers (name,pavarde,ak,data, numeris) values(?, ?, ?, ?,?)";
    $q = $pdo->prepare($sql);
    $q->execute(array($name, $pavarde, $ak, date("Y-m-d H:i:s", time()), $numeris));

    $pirkejo_id = $pdo->lastInsertId();

    foreach ($prekes as $preke) {
        //prekiu uzpildymas
        $sql = "INSERT INTO prekes (customer_id,prek_name,prek_value) values(?, ?, ?)";
        $q = $pdo->prepare($sql);
        $q->execute(array($pirkejo_id, $preke['pavadinimas'], $preke['kaina']));
    }

    Database::disconnect();
    header("Location: default.php");

I don't know how to get all values from database,

like image 268
Aipo Avatar asked May 19 '26 07:05

Aipo


1 Answers

Don't inject values into your SQL queries. Use parameter binding instead.

$q = $pdo->prepare('SELECT id, prek_name, prek_value FROM prekes WHERE customer_id = ?');
$q->execute([$pirkejas]); // if PHP < 5.4, use array($pirkejas)
$prekes = $q->fetchAll(PDO::FETCH_ASSOC);

Now $prekes will be an array of rows where each row is an associative array.

<?php foreach ($prekes as $row) : ?>
<tr>
    <td>
        <input name="prekes[<?= (int) $row['id'] ?>][pavadinimas]"
               value="<?= htmlspecialchars($row['prek_name']) ?>">
    </td>
    <td>
        <input name="prekes[<?= (int) $row['id'] ?>][kaina]"
               value="<?= htmlspecialchars($row['prek_value']) ?>">
    </td>
</tr>
<?php endforeach ?>
like image 69
Phil Avatar answered May 20 '26 19:05

Phil