Мой оператор вставки (php to mysql) не может использовать мои переменные - PullRequest
0 голосов
/ 15 февраля 2011

Это, должно быть, самая простая ошибка, но я не вижу и не нахожу ее.

Я заполняю переменную $aa_minerid значением 7. Я использую эту переменную во вставке. Вставка всегда вставляет 0 (ноль) в базу данных, а не 7

Поле, в которое я положил это smallint(6) Я пытался

VALUES ('$aa_productid')
VALUES ($aa_productid)
VALUES ("$aa_productid")
VALUES ('{$aa_productid}')
VALUES ("{$aa_productid}")

и все с использованием `aswell в сценарий, размещенный ниже.

Если я положу туда: VALUES ( 7 ) Это работает отлично.

Так что же я делаю не так в этом сценарии? Кстати, эхо в конце показывает правильное значение переменной $ aa_productid

<?php

/* This php script should transfer data from the aa to the sql database */

// Info coming from aa

$aa_productid = 7 ;

include ("dogs.inc");

$cxn=mysqli_connect($host,$user,$passwd,$dbname);

$query = 'SELECT * FROM `Price` WHERE '
        . ' `Time_Stamp`=(select max(`Time_Stamp`) from `Price` where `Product_ID` = \'1\')';

$result=mysqli_query($cxn,$query) or
                die("Couldn't execute select query");

$row = mysqli_fetch_row($result);

$aa_price=$row[3]   ;   

$aa_value = $aa_price * $aa_amount;

// Info ready to go to database

$sqlinsert = 'INSERT INTO Mining (Product_ID)'
      . ' VALUES ( $aa_productid )' ;

echo $aa_productid;

Ответы [ 6 ]

3 голосов
/ 15 февраля 2011

Одинарные кавычки не делают раскрытие переменных в PHP. Но я бы порекомендовал вам использовать подготовленные заявления, такие как:

$stmt = $cxn->prepare('INSERT INTO Mining (Product_ID) VALUES ( ? )');
$stmt->bind_param('i', $aa_productid);
$stmt->execute();

См. Документацию на подготовить и bind_param .

Это защитит вас от SQL-инъекции .

0 голосов
/ 03 марта 2015

Попробуйте этот синтаксис вместо:

$sqlinsert = "INSERT INTO Mining (Product_ID) VALUES ("' . $aa_productid . '")";

нет необходимости объединять две части вставки. Кроме того, двойные кавычки переменной, кажется, позволяют избежать проблем.

0 голосов
/ 15 февраля 2011

Попробуйте:

$ query = "SELECT * FROM Price WHERE Time_Stamp = (выберите max (Time_Stamp) из Price, где Product_ID =" 1 ")";

$ sqlinsert = "INSERTINTO Mining (Product_ID) VALUES ('$ aa_productid') ";

Кроме того, всегда полезно избегать строк перед их вводом в БД.

0 голосов
/ 15 февраля 2011

Когда вы используете переменные в кавычках, вы должны использовать двойные кавычки, если вы хотите, чтобы PHP анализировал переменные внутри них.Итак, это будет работать:

$sqlinsert = 'INSERT INTO Mining (Product_ID) VALUES ('.$aa_productid.')';

Или это будет:

$sqlinsert = "INSERT INTO Mining (Product_ID) VALUES ($aa_productid)";
0 голосов
/ 15 февраля 2011

Прошло много времени с тех пор, как я написал PHP, но ..

Я думаю, вам нужно включить умные цитаты

Попробуйте вместо этого:

$sqlinsert = 'INSERT INTO Mining (Product_ID)'
  . ' VALUES ('. $aa_productid .' )' ;

объединить переменную в запрос.

0 голосов
/ 15 февраля 2011

Попробуйте '.$aa_productid.' или ".$aa_productid."

В зависимости от типа апострофа, используемого для подгонки строки, используйте тот же самый.тогда Вы должны быть в состоянии Просто сделать

$insert="INSERT INTO $tablename;";

...